如何在Kotlin中构成可空的
假设你有2个函数返回为空,你不能编写这2个函数:
fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2
为了达到这个构图,我写了这个函数:
fun all(x:Int):Int? { val y = giveInt(x) if (y != null) return giveInt2(y) else return null; } val four = all(1)
if (y != null)
没有明确写入if (y != null)
并return null
是否有可能组合2个可为null的值来获得另一个可为return null
?
在斯卡拉,我只是做一些事情:
def giveInt(x: Int):Option[Int] = Some(x+1) def giveInt2(x: Int):Option[Int] = Some(x+2) def all(x:Int): Option[Int] = giveInt(x).flatMap(giveInt2)
我应该使用java可选来实现这一点,或者可能与?
运营商?
谢谢 :)
如果你想从字面上编写两个函数(在FP意义上),那么最好使用函数引用来提高可读性:
fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2 fun all(x: Int): Int? = giveInt(x)?.let(::giveInt2)
这是可能的safe call ?.
运算符, let
功能组合:
fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2 fun all(x: Int): Int? = giveInt(x)?.let { giveInt2(it) }
对于更多这样的成语,请使用此链接 。