正如@AndroidEx正确指出的那样,与Java不同,分配不是Kotlin中的表达式。原因是通常不建议带有副作用的表达。见这个讨论上类似的话题。
一种解决方案是拆分表达式并将赋值移出条件块:
a = bif (a != c) { ... }另一个是使用stdlib中的函数,例如
let,以接收者作为参数执行lambda并返回lambda结果。
apply并
run具有相似的语义。
if (b.let { a = it; it != c }) { ... }__
if (run { a = b; b != c }) { ... }感谢inline,这将与从lambda提取的纯代码一样有效。
您的示例
InputStream如下所示
while (input.read(bytes).let { tmp = it; it != -1 }) { ... }另外,考虑从中
readBytes读取a的函数。
ByteArray``InputStream



