[SCALA] 삼항 연산자 유사하려면?
SCALA삼항 연산자 유사하려면?
이 같은 피할 구조에 노력하고 있습니다 :
val result = this.getClass.getSimpleName
if (result.endsWith("$")) result.init else result
좋아,이 예제에서는 다음과 다른 지점은 간단합니다,하지만 당신은 이미지 복잡한 것들을 할 수 있습니다. 나는 다음을 구축 :
object TernaryOp {
class Ternary[T](t: T) {
def is[R](bte: BranchThenElse[T,R]) = if (bte.branch(t)) bte.then(t) else bte.elze(t)
}
class Branch[T](branch: T => Boolean) {
def ?[R] (then: T => R) = new BranchThen(branch,then)
}
class BranchThen[T,R](val branch: T => Boolean, val then: T => R)
class Elze[T,R](elze: T => R) {
def :: (bt: BranchThen[T,R]) = new BranchThenElse(bt.branch,bt.then,elze)
}
class BranchThenElse[T,R](val branch: T => Boolean, val then: T => R, val elze: T => R)
implicit def any2Ternary[T](t: T) = new Ternary(t)
implicit def fct2Branch[T](branch: T => Boolean) = new Branch(branch)
implicit def fct2Elze[T,R](elze: T => R) = new Elze(elze)
}
내가 가진 위의 간단한 예를 대체 할 수 있다고 정의 :
this.getClass.getSimpleName is {s: String => s.endsWith("$")} ? {s: String => s.init} :: {s: String => s}
그러나 어떻게이의 제거 할 수 있습니다 문자열 =>? 나는 그런 일을합니다 :
this.getClass.getSimpleName is {_.endsWith("$")} ? {_.init} :: {identity}
나는 컴파일러가 추론 유형에 여분의 물건을 필요 같아요.
해결법
-
==============================
1.우리는 최고의 토큰을 보존 스칼라에서 삼항 연산자를 정의하는 방법을 결합 할 수 있습니다? 값이 좋은 패턴을 배치됩니다 옵션에 대한 대답으로? 얻을 수
우리는 최고의 토큰을 보존 스칼라에서 삼항 연산자를 정의하는 방법을 결합 할 수 있습니다? 값이 좋은 패턴을 배치됩니다 옵션에 대한 대답으로? 얻을 수
scala> "Hi".getClass.getSimpleName |> {x => x.endsWith("$") ? x.init | x} res0: String = String scala> List.getClass.getSimpleName |> {x => x.endsWith("$") ? x.init | x} res1: String = List
이 귀하의 요구에 적합한가요?
-
==============================
2.토니 모리스 '람다 블로그에서 :
토니 모리스 '람다 블로그에서 :
-
==============================
3.렉스 커의 대답은 기본 스칼라로 표현 :
렉스 커의 대답은 기본 스칼라로 표현 :
"Hi".getClass.getSimpleName match { case x if x.endsWith("$") => x.init case x => x }
나는 최적화 할 어떤 경우 - 다른 구조의 일부가 확실하지 않다 있지만.
-
==============================
4.스칼라의 경우 - 다른 구조가 값을 반환하기 때문에, 당신은이를 사용할 수 있습니다
스칼라의 경우 - 다른 구조가 값을 반환하기 때문에, 당신은이를 사용할 수 있습니다
val a = if (1 < 0) 1 else 2
추가 정보 : https://alvinalexander.com/scala/scala-if-then-ternary-operator-cookbook-examples
-
==============================
5.당신은 항상 다시 진드기로 탈출로 확인하지 않는 한 그 자체로 유효한 연산자를하지 않습니다 : 때문에, 당신은 다른 문자, 예를 들어, 함께 갈 수 "|" 위의 답변 중 하나로서. 그러나 어떻게 수염 엘비스는? ::
당신은 항상 다시 진드기로 탈출로 확인하지 않는 한 그 자체로 유효한 연산자를하지 않습니다 : 때문에, 당신은 다른 문자, 예를 들어, 함께 갈 수 "|" 위의 답변 중 하나로서. 그러나 어떻게 수염 엘비스는? ::
implicit class Question[T](predicate: => Boolean) { def ?(left: => T) = predicate -> left } implicit class Colon[R](right: => R) { def ::[L <% R](pair: (Boolean, L)): R = if (q._1) q._2 else right } val x = (5 % 2 == 0) ? 5 :: 4.5
그들이 가지고 있기 때문에 :: 연산자를 스스로 물론이 다시 값은 목록입니다하지 작동합니다.
from https://stackoverflow.com/questions/4947535/ternary-operator-similar-to by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 중괄호 코드 블록으로 전달 함수 (0) | 2019.11.26 |
---|---|
[SCALA] 거기 비록 SBT는 지역 받는다는 저장소에서 파일을 찾을 수 없습니다 (0) | 2019.11.26 |
[SCALA] 스칼라 2.10 + JSON 직렬화 및 역 직렬화 (0) | 2019.11.25 |
[SCALA] 스칼라 : 목록 대 무기 호 () (0) | 2019.11.25 |
[SCALA] 스칼라에서 영구 데이터 구조 (0) | 2019.11.25 |