为了简化我的实际用例,我们假设我想在列表中找到最大数字:
echo "$username"
但是,编译失败并出现以下错误:
聪明地投射到' Int'是不可能的,因为' max'是一个由更改闭包
捕获的局部变量
为什么更改闭包会阻止智能转换在此示例中工作?
答案 0 :(得分:1)
感谢Ilya详细解释问题!
如果您需要解决方法,可以使用标准for(item in list){...}
表达式,如下所示:
var max : Int? = null
val list = listOf(1, 2, 3)
for(item in list){
if (max == null || item > max) {
max = item
}
}
答案 1 :(得分:0)
问题在于tab
创建了多个闭包,每个闭包都访问int
char
{。}}。
如果在foreach
检查后但在max
之前,var
在另一个闭包中设置为max
会怎样?
由于每个闭包理论上可以独立工作(可能在多个线程上),但都访问相同的null
,因此不能保证它在执行期间不会改变。