* arrayOf()是一个声明吗?

时间:2017-09-08 21:20:22

标签: operators kotlin

当我注意到一些奇怪的东西时,我正在使用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())

其中一个编译器错误是

  

期待表达

  • 那么,*arrayOf()是一个陈述吗?
  • 如果是,listOf()如何评估?

1 个答案:

答案 0 :(得分:5)

不,这既不是陈述也不是表达。

spread运算符有一个非常特殊的作用:它只能修改作为vararg传递的数组类型表达式的语义,给出一种特殊的参数。它不能在其他表达式中独立使用,这就是为什么在if表达式中使用它的代码不能编译的原因。