함수의 결과가 Kotlin의 when 문에서 절로 작동하지 않는 이유는 무엇입니까?

로데오 클라운

다음 (길이 편집) Kotlin 기능이 있습니다.

fun getType(obj: Any?): String {
    if (obj != null)
        println("$obj -> isArray:${isArray(obj)}")

    return when (obj) {
        null -> "null"
        [...]
        isArray(obj) -> "Array"
        else -> "Other object"
    }
}

private fun isArray(obj: Any): Any = 
        obj is Array<*> ||
        [...]
        obj is IntArray

나는 때 assertEquals("Array", getType(intArrayOf(1,2,3,4)))나는 다음과 같은 출력을 얻을 :

[I@1e25b76 -> isArray:true

org.junit.ComparisonFailure: 
Expected :Array
Actual   :Other object

따라서 isArray호출은를 반환 true하지만 when에서 인식되지 않습니다 . "Array"여기로 돌아 오지 않을까요?

(이 특정 호출을 when성명 앞에두면이 문제를 해결할 수 있지만보기에는 좋지 않습니다.)

제이슨 미나 드

먼저 것입니다,이 문제가 isArray필요 반환 Boolean하지 Any.

두 번째 문제는 고정 된 조건이있는 when표현식 의 형식을 사용하고 있고, 고정 된 조건 이없는 obj형식 when과 부울 표현식 만 사용 하는 형식과 혼합한다는 것입니다 . 문서는 차이점에 대해 명확하지 않습니다.

고정 when조건식 :

when(obj) {
    null -> "null"
    is Array<*>, is IntArray, is DoubleArray -> "Array"
    else -> "Other object"
}

사용할 필요가있는 것과 비교하여 when식의 부울 식 :

when {                            // <--- no (obj) here
    obj == null -> "null"
    isArray(obj) -> "Array"
    else -> "Other object"
}

배열을 찾는 훨씬 더 간단한 방법은 다음과 같습니다.

obj.javaClass.isArray

따라서 when표현을 간단히 다음과 같이 변경할 수 있습니다.

when {
    obj == null -> "null"
    obj.javaClass.isArray -> "Array"
    else -> "Other object"
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

의사 결정 트리가 WEKA에서 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

의사 결정 트리가 WEKA에서 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

배열의 함수가 '인수'에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

DataFrame에서 이것이 내가 의도 한대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

rbind가 사용자 정의 함수 내에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

두 개의 if 문이 하나의 함수에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

문자열 내의 문자 바꾸기-함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Matlab의 프로그램에서 ismember가 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Data.Time.Clock.POSIX의 getCurrentTime 함수가 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 코드의 fprintf () 함수가 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

each () 함수가 DOM에 연결된 입력으로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Python의 def 함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Prolog의 min () 함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Java의 Euler # 4 프로젝트 코드에서 parseInt가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Codeigniter의 암호화가 로컬 서버에서는 작동하지만 서버에서는 작동하지 않는 이유는 무엇입니까?

분류에서Dev

C의 printf 함수 내에서 모듈로 연산자가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

apicontroller의 경로가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

이 NLog 레이아웃의 "when"절이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Java의 역 문자열 논리가 파이썬에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

JavaScript의 if 문에서 비트 xor가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

개수 함수가 Spark에서 맵값으로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

XAML에서 절대 경로가있는 이미지를 검색 할 수 있지만 코드 뒤에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

파이썬에서이 배열의 발생 횟수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

switch case 문이 Enum의 속성과 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

imshow 함수가 matlab에서 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

하나의 변수가 한 페이지에서 작동하고 다른 페이지에서는 작동하지 않는 이유는 무엇입니까?

분류에서Dev

하나의 인수에 오버로드 문자열 화가있을 때`eq`가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

함수가 구조체의 메서드로 이동할 때 # [inline] 속성이 작동을 중지하는 이유는 무엇입니까?

분류에서Dev

내 열 수가 Chrome의 Bootstrap에서 작동하지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    의사 결정 트리가 WEKA에서 예상대로 작동하지 않는 이유는 무엇입니까?

  2. 2

    의사 결정 트리가 WEKA에서 예상대로 작동하지 않는 이유는 무엇입니까?

  3. 3

    배열의 함수가 '인수'에서 작동하지 않는 이유는 무엇입니까?

  4. 4

    DataFrame에서 이것이 내가 의도 한대로 작동하지 않는 이유는 무엇입니까?

  5. 5

    rbind가 사용자 정의 함수 내에서 작동하지 않는 이유는 무엇입니까?

  6. 6

    두 개의 if 문이 하나의 함수에서 작동하지 않는 이유는 무엇입니까?

  7. 7

    문자열 내의 문자 바꾸기-함수가 작동하지 않는 이유는 무엇입니까?

  8. 8

    Matlab의 프로그램에서 ismember가 제대로 작동하지 않는 이유는 무엇입니까?

  9. 9

    Data.Time.Clock.POSIX의 getCurrentTime 함수가 예상대로 작동하지 않는 이유는 무엇입니까?

  10. 10

    내 코드의 fprintf () 함수가 제대로 작동하지 않는 이유는 무엇입니까?

  11. 11

    each () 함수가 DOM에 연결된 입력으로 작동하지 않는 이유는 무엇입니까?

  12. 12

    Python의 def 함수가 작동하지 않는 이유는 무엇입니까?

  13. 13

    Prolog의 min () 함수가 작동하지 않는 이유는 무엇입니까?

  14. 14

    Java의 Euler # 4 프로젝트 코드에서 parseInt가 작동하지 않는 이유는 무엇입니까?

  15. 15

    Codeigniter의 암호화가 로컬 서버에서는 작동하지만 서버에서는 작동하지 않는 이유는 무엇입니까?

  16. 16

    C의 printf 함수 내에서 모듈로 연산자가 작동하지 않는 이유는 무엇입니까?

  17. 17

    apicontroller의 경로가 작동하지 않는 이유는 무엇입니까?

  18. 18

    이 NLog 레이아웃의 "when"절이 작동하지 않는 이유는 무엇입니까?

  19. 19

    Java의 역 문자열 논리가 파이썬에서 작동하지 않는 이유는 무엇입니까?

  20. 20

    JavaScript의 if 문에서 비트 xor가 작동하지 않는 이유는 무엇입니까?

  21. 21

    개수 함수가 Spark에서 맵값으로 작동하지 않는 이유는 무엇입니까?

  22. 22

    XAML에서 절대 경로가있는 이미지를 검색 할 수 있지만 코드 뒤에서 작동하지 않는 이유는 무엇입니까?

  23. 23

    파이썬에서이 배열의 발생 횟수가 작동하지 않는 이유는 무엇입니까?

  24. 24

    switch case 문이 Enum의 속성과 함께 작동하지 않는 이유는 무엇입니까?

  25. 25

    imshow 함수가 matlab에서 제대로 작동하지 않는 이유는 무엇입니까?

  26. 26

    하나의 변수가 한 페이지에서 작동하고 다른 페이지에서는 작동하지 않는 이유는 무엇입니까?

  27. 27

    하나의 인수에 오버로드 문자열 화가있을 때`eq`가 작동하지 않는 이유는 무엇입니까?

  28. 28

    함수가 구조체의 메서드로 이동할 때 # [inline] 속성이 작동을 중지하는 이유는 무엇입니까?

  29. 29

    내 열 수가 Chrome의 Bootstrap에서 작동하지 않는 이유는 무엇입니까?

뜨겁다태그

보관