像
这样的简单检查if (variable != null) {
doSomething(variable)
}
我们可以改为
variable?.let { doSometing(it) }
但是对于其他情况
if (variable != null) {
doSomething(variable)
} else {
doOtherThing()
}
有没有办法在单一功能中这样做?是否有类似的东西?
答案 0 :(得分:0)
您可以像这样使用elvis-operator ?:
:
variable?.let { doSomething(it) } ?: doOtherThing()
然而,我个人认为这很快就会变得难以理解。 if-expression没有任何问题。
答案 1 :(得分:0)
另一种可能与功能风格完美结合的方法是使用when,它非常接近模式匹配:
if
但是,我会争辩说,如果你追求的是它的自然目的 - 条件执行,你应该小心放弃经典的if
陈述。如果您以两种不同的方式计算一个值,然后以相同的方式使用它,这种方法是有意义的。但是,如果您的代码路径在此时出现分歧而又不再相遇,那么Mat src = imread("img.png",CV_LOAD_IMAGE_COLOR); //load image
Mat bgr[3]; //destination array
split(src,bgr);//split source
//Note: OpenCV uses BGR color order
imwrite("blue.png",bgr[0]); //blue channel
imwrite("green.png",bgr[1]); //green channel
imwrite("red.png",bgr[2]); //red channel
会提供更清晰的意图。
答案 2 :(得分:0)
如果不为null,则可以使用三元运算符映射null-null值,以使用If ... Else Statements检查非空条件。
在这里,我写了一些代码片段来检查值是否为空,
案例1:初始化值
fun main(args: Array<String>) {
val value:Int ?= 10
val mapped = value?.let { "Value is == $value" } ?: "Value not initialized..."
println(mapped)
}
你得结果:值是== 10
案例2:值集保持为空
fun main(args: Array<String>) {
val value:Int ?= null
val mapped = value?.let { "Value is == $value" } ?: "Value not initialized..."
println(mapped)
}
你得结果:价值未初始化......