我怎么用惯用的 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()
}
containsKey
和getInt
是arguments
的方法。
当然这不是 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)
我问了一个问题:
现在我想到了这个成语的简称。如下所示
private fun getTouchX(): Int = when(arguments)
containsKey(KEY_DOWN_X) -> getInt(KEY_DOWN_X)
else -> centerX()
}
containsKey
和getInt
是arguments
的方法。
当然这不是 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)