문제

@lucastex 게시 Java Elvis 운영자에 대해, 그리고 나는 같은 효과를 얻기 위해 Scala에서 무언가를 시도했습니다.

방금 모든 것을 새로운 구조 유형으로 변환했습니다. ?: 연산자는 인수와 같은 유형의 대상을 취합니다. 그러니 말하기 :

implicit def toRockStar[B](v : B) = new { 
                            def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example

name ?: "Lucas" 얻는다 "Lucas" 그리고 name.?:{"Lucas"} 얻는다 Paulo? 새로운 구조 유형은 무효가 아닙니다, 그건, "Paulo" 위 코드에서.

나는 약간 혼란스러워. 설명이 있습니까?

도움이 되었습니까?

해결책

운영자가 끝납니다 :, 이는 Infix 표기법에있을 때 오른쪽에서 왼쪽으로 읽는다는 것을 의미합니다. 예를 들어:

scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true

그러나 모든 방법은 도트 표기법으로 왼쪽에서 오른쪽으로 읽습니다. 그래서 당신은 실제로 당신의 방법을 적용하고 있습니다 Lucas Infix 표기법에서 name 도트 표기법에서.

그건 그렇고, Elvis 운영자는있었습니다 허용되지 않음 Java 7에 포함시키기 위해.

다른 팁

레코드 (다음 기사를 검색하는 동안이 스레드 찾기 ...), Daniel Spiekak (Scala World의 또 다른 유명한 Daniel ...)은 기사를 게시했습니다. Scala에서 Groovy의 Elvis 운영자 구현.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top