*arrayOf() 是一个语句吗?
Is *arrayOf() a statement?
我正在使用 spread operator,当我注意到一些奇怪的事情时:
// 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())
其中一个编译器错误是
Expecting an expression
- 那么,
*arrayOf()
是一个声明吗?
- 如果是,如何被
listOf()
评价?
不,它既不是语句也不是表达式。
扩展运算符有一个非常特殊的作用:它只能修改作为 vararg
传递的数组类型表达式的语义,给出一种特殊的参数。它不能在其他表达式中独立使用,这就是为什么在 if
表达式中使用它的代码无法编译。
我正在使用 spread operator,当我注意到一些奇怪的事情时:
// 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())
其中一个编译器错误是
Expecting an expression
- 那么,
*arrayOf()
是一个声明吗? - 如果是,如何被
listOf()
评价?
不,它既不是语句也不是表达式。
扩展运算符有一个非常特殊的作用:它只能修改作为 vararg
传递的数组类型表达式的语义,给出一种特殊的参数。它不能在其他表达式中独立使用,这就是为什么在 if
表达式中使用它的代码无法编译。