Kotlin中Elvis运算符处理计算值的编译问题求助
解决Kotlin Elvis运算符右侧代码块的编译问题
你遇到的问题核心是Elvis运算符?:要求两侧类型必须匹配——左侧是String?类型,而直接写lambda的话,右侧是() -> String函数类型,自然编译不通过。完全不需要用takeIf/takeUnless,这俩是用来根据条件取舍对象的,和你当前场景不匹配,直接用下面两种方法就能解决:
方式一:直接执行lambda
在lambda表达式末尾加上(),强制执行这个函数拿到返回值,让右侧类型和左侧统一为String:val string: String = null ?: { // 这里写你的计算逻辑 println("执行复杂计算") "something else" }()方式二:用
run函数(更推荐)run函数专门用来执行一段代码块并返回最后一行的结果,写法更简洁易读:val string: String = null ?: run { // 执行任意计算逻辑,比如变量运算、调用其他方法 val calcResult = 10 * 5 "something else $calcResult" }
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

