当我发现奇怪的东西时,我正在使用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()对其进行评估?
  • 最佳答案

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

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

    08-05 18:03