当我注意到一些奇怪的东西时,我正在使用传播操作符:
// compiles
val list1 = listOf(1, 2, *(if(0 > 1) arrayOf(3) else arrayOf()))
// does not compile
val list2 = listOf(1, 2, if(0 > 1) *arrayOf(3) else *arrayOf())
Run Code Online (Sandbox Code Playgroud)
其中一个编译器错误是
期待一个表达
*arrayOf()一个声明吗?listOf()?不,这既不是陈述也不是表达.
spread运算符有一个非常特殊的作用:它只能修改传递vararg给它的数组类型表达式的语义,给出一种特殊的参数.它不能在其他表达式中独立使用,这就是为什么在if表达式中使用它的代码不能编译的原因.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |