2017-12-04 45 views
0

을 경고 다음 수신 :코 틀린 널 안전 경고 예기치 않은 토큰 (사용, 같은 줄에 표현 분리해서하는) 내 응용 프로그램에서 코 틀린 코드에서 <a href="https://kotlinlang.org/docs/reference/null-safety.html#elvis-operator" rel="nofollow noreferrer">Elvis operator</a>을 시도하고 있었다

Unexpected tokens (use ; to seperate expressions on the same line) 

코드 :

var key: String = "KEY is" 
    /* "check" is name of String variable which can be null 
    Warning coming on following statement*/ 
    var str : String = check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check 

아이디어를 해결하는 방법은 무엇입니까?

+0

왜 Elvis 연산자를 사용 하시겠습니까? 귀하의 변수 중 어느 것도 nullable이 아니기 때문에 무의미합니다. 또한,'check'를 초기화하지 않습니다. – Moira

답변

1

처럼 사용할 수있다. 귀하의 변수 중 어느 것도 null을 사용할 수 없습니다.


당신은 (check 후)

check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check 

?

을 썼다 코 틀린에 운영자가 아닙니다.

ternary conditional operator, which is simply replaced by if/else을 원했을 수 있습니다.

귀하의 의견을 볼 때, safe call 연산자는 ?.이 아니라 ?이 아닌 것으로 생각하는 것 같습니다.

check?.key?.replace("KEY", "ABDS-ASDSA-DSSS") ?: check 

Elvis operator 및 안전한 전화 사업자의 차이가있다. 엘비스 연산자는 표현식으로 작동하지만 안전한 호출 연산자는 단순히 null-safe 속성 액세스 또는 메서드 호출입니다.

Elvis 연산자는 null이 아니면 첫 번째 피연산자를 반환하고 그렇지 않으면 두 번째 피연산자를 반환합니다.

수신자가 null 인 경우 null을 반환하고 그렇지 않으면 호출 결과를 반환합니다.

+0

고맙습니다. 사실 실제 코드는 문제의 코드와 다릅니다. 질문을 편집 할 수 있습니까? –

+0

@MalwinderSingh 당신은 무엇을 의미합니까? 질문에 누락 된 것이있는 경우에만 추가 할 수 있습니다. 질문자이며 추가 할 내용을 모르겠습니다. – Moira

+0

문제를 명확히하기 위해 변경해야 할 사항에 대해 질문했습니다. –

0

kotlin은 삼항 연산자를 지원하지 않습니다.

심지어 check는 귀하의 경우하지 boolean 변수는 부울 만들거나 당신이 여기에 null 안전 운영자 필요한 이유를 내가 이해하지 못할

var check: String = "something here" 
var key: String = "KEY is" 
/*Warning coming on following statement*/ 
var str : String = key.replace("KEY", "ABDS-ASDSA-DSSS")?:check 
+0

Thanks @Irony Stack. 실제로 저는 Kotlin의 Elvis 연산자 (https://kotlinlang.org/docs/reference/null-safety.html#elvis-operator)를 사용하려고했습니다. 엘비스 수술실이 왜 작동하지 않는지 말해 줄 수 있어요? –

+0

하지만 key는'check'의 속성이 아닙니다. 그런 식으로 사용할 수 없습니다 –

+0

내 업데이트 확인 –