2017-09-08 3 views
4

내가 뭔가 이상한 발견했을 때이의 spread operator를 사용했다 : 식 그래서* 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()을 어떻게 평가할 수 있습니까?

답변

5

아니요, 진술도 표현도 아닙니다.

확산 연산자는 특별한 유형의 인수를 제공하여 vararg으로 전달 된 배열 형식 표현식의 의미를 수정할 수있는 매우 특별한 역할을합니다. 다른 표현식에서 독립적으로 사용할 수 없기 때문에 if 표현식 내에서 사용되는 코드는 컴파일되지 않습니다.