kotlin - 为什么 ?.let 即使计算结果为非 null 也返回 nullable
问题描述
Kotlin 的标准函数let
是这样定义的:
public inline fun <T, R> T.let(block: (T) -> R): R
这是否意味着 let 的返回类型将是块返回的任何内容?
为什么这不起作用?
var a: String? = "maybe null"
val x: Boolean = a?.let {
a.contains("maybe") // note that contains returns Boolean, not Boolean?
}
这抱怨:类型不匹配:必需Boolean
,发现Boolean?
它不应该返回一个Boolean
,因为contains
函数返回一个Boolean
?
我确定我误解了一些东西。也许有人可以帮助我和其他新手更好地理解。
解决方案
a?.let
返回您在给定的 let-block 中所做的任何事情,但是您a
可能null
不确定是否let
甚至调用了 -block。这就是为什么x
必须是或者你需要指定如果是Boolean?
应该返回什么,例如:a
null
val x: Boolean = a?.let { a.contains("maybe") }
?: false // this is used if `a` is null
推荐阅读
- swift - 有办法在两个 viewController 之间共享 UI 元素吗?
- php - 更新嵌套数组中的单个字段值而不修改其他字段值?
- android - bundle.containskey("xx") 返回 true 但系统抛出 npe
- git - 更改 GitLab 的安装目录
- android - 动态特征模块第三方库无法访问资源
- java - 使用java将数据从Dynamo DB推送到elasticsearch
- c# - 如何使用 Entity Framework 6 创建内存中的 DbContext?
- python - 获取匹配记录的索引
- linux - Crontab 覆盖 kitchen.sh pentaho 的工作
- node.js - TCP还是UDP?视频流的制作延迟