我怎么用惯用的 Kotlin 写这个? - 2

How would I write this in idiomatic Kotlin? - 2

我问了一个问题:

现在我想到了这个成语的简称。如下所示

private fun getTouchX(): Int = when(arguments) 
     containsKey(KEY_DOWN_X) -> getInt(KEY_DOWN_X)
     else -> centerX() 
}

containsKeygetIntarguments的方法。

当然这不是 when 的正确习语。
有什么办法可以做到这一点吗?

arguments 是 Android 框架中的 Bundle class。 你可以在下面看到 https://developer.android.com/reference/android/os/Bundle.html https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/Bundle.java https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/BaseBundle.java

根据你提供的信息,我只能给你这个答案:

private fun getTouchX(): Int = arguments.run {
    if (containsKey(KEY_DOWN_X)) getInt(KEY_DOWN_X)
    else centerX()
}

如果arguments可以为空,可以这样:

private fun getTouchX(): Int = arguments?.run {
    if (containsKey(KEY_DOWN_X)) getInt(KEY_DOWN_X)
    else null
} ?: centerX()

感谢@ice1000 的回答。 我得到了下面的成语也可以

private fun getTouchX(): Int = arguments?.run {
    when {
        containsKey(KEY_DOWN_X) -> getInt(KEY_DOWN_X)
        else -> null
    }
} ?: centerX()

我可能会在超过 3 个谓词条件时使用它(如果 x 3)