* arrayOf()是一个语句?
当我注意到一些奇怪的东西时,我正在使用扩散算子 :
// 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())
其中一个编译器错误是
期待一个表达
- 那么,
*arrayOf()
是一个语句吗? - 如果是,那么如何通过
listOf()
来评估?
不,这既不是一个声明,也不是表达。
展开运算符有一个非常特殊的角色:它只能修改作为vararg
参数传递的数组类型表达式的语义,给出一个特殊类型的参数。 它不能在其他表达式中独立使用,这就是为什么在if
表达式中使用的代码不能编译的原因。