[SCALA] 스칼라의 "접미사 작전"
SCALA스칼라의 "접미사 작전"
나는 30 분에 검색 한, 여전히 그것을 알아낼 수 없습니다.
SIP에서 : 모듈화 언어 스칼라 2.10 (수입 language.feature)의 "사용"을 명시 적으로 필요 기능의 숫자가 특징. 그들 사이에 난 그냥 어디서든 참조를 찾을 수있는, postfixOps있다. 정확히이 기능은 무엇을 할 수 있습니까?
해결법
-
==============================
1.그것은 당신이 후위 위치에 연산자 구문을 사용할 수 있습니다. 예를 들면
그것은 당신이 후위 위치에 연산자 구문을 사용할 수 있습니다. 예를 들면
List(1,2,3) tail
보다는
List(1,2,3).tail
이 무해한 예제에서는 문제가되지 않습니다,하지만 모호함으로 이어질 수 있습니다. 이 컴파일되지 않습니다 :
val appender:List[Int] => List[Int] = List(1,2,3) ::: //add ; here List(3,4,5).foreach {println}
그리고 오류 메시지가 매우 도움이되지 않습니다 :
value ::: is not a member of Unit
이 유형의 장치이다 foreach는 호출의 결과에 ::: 메소드를 호출하려고합니다. 이것은 프로그래머가 의도하지 무엇을 가능성이있다. 올바른 결과를 얻으려면, 당신은 첫 번째 행 다음에 세미콜론을 삽입해야합니다.
-
==============================
2.지금까지 가장 간단한 대답은 :
지금까지 가장 간단한 대답은 :
매개 변수없이 방법에서 점을 삭제가되지 않습니다!
List(1,2,3) reverse //is bad style and will lead to unpredicted behaviour List(1,2,3) map(_*2) reverse //bad too, because reverse can take first method call from the next line (details below)
맵, 필터와 같은 고차 함수의 하나 개의 매개 변수를 사용 방법에 도트를 드롭 OK, 카운트 안전! 또한, 지퍼 등 순수 작용 방법.
List(1,2,3) map(_*2) filter(_>2) (List(1,2,3) map(_*2)).reverse //safe and good List(1,3,5) zip List(2,4,6)
긴 대답 왜
case class MyBool(x: Boolean) { def !!! = MyBool(!x) //postfix def or(other: MyBool): MyBool = if(x) other else this //infix def justMethod0() = this //method with empty parameters def justMethod2(a: MyBool, b: MyBool) = this //method with two or more override def toString = if(x) "true" else "false" }
1) 후위 연산자! -.! 실제로 방법 매개 변수없이 호출 (a가 == a)와 브래킷없이. (안전하지 간주되지 않음)
val b1 = MyBool(false) !!! List(1,2,3) head
2) 후위 연산자는 광고를 종료한다, 그렇지 않으면이 중위로 처리되도록, 방법.
val b1 = MyBool(true) no! no! //ERROR //is actually parsed like val b2 = MyBool(true).no!(no!) //(no!) is unknown identifier //as bad as Vector(1,2,3) toList map(_*2) //ERROR
3) 중위 연산자 도트 괄호없이 호출 될 수있는 하나 개의 파라미터와 방법이다. 오직 순수하게 기능적인 방법에 대한
val c1 = MyBool(true) or b1 or MyBool(true) val c2 = MyBool(true).or(b1).or(MyBool(true)) c1 == c2
하나 개 이상의 매개 변수 4) 방법 것입니다 당신이 매개 변수를 호출하는 경우 점없이 체인. 데프 (), 데프 (X), 데프 (X, Y) 하지만 당신은 유일한 매개 변수로 고차 함수를 사용하는 방법에 대해이 작업을 수행해야합니다!
val d1 = MyBool(true) justMethod2(b1, c1) or b1 justMethod0() justMethod2(c1, b1) //yes, it works, but it may be confusing idea val d2 = MyBool(true).justMethod2(b1,c1).or(b1).justMethod0().justMethod2(c1, b1) d1 == d2 //looks familiar? This is where it should be used: List(1,2,3) filter(_>1) map(_*2)
샘플 경고 :
-
==============================
3.그것은 후위 연산자와 같은 방법 (아무 인수 목록 또는 빈 인수 목록과 함께) 인수 없음을 호출하는 기능을 말합니다 :
그것은 후위 연산자와 같은 방법 (아무 인수 목록 또는 빈 인수 목록과 함께) 인수 없음을 호출하는 기능을 말합니다 :
예를 들어 기준 :
case class MyBool(value: Boolean) { def negated = new MyBool(!value) } val b1 = MyBool( true ) val b2 = b1 negated // Same as b1.negated
참조 : http://www.scala-lang.org/node/118
from https://stackoverflow.com/questions/13011204/scalas-postfix-ops by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 새로운 스칼라 반사 API와 동반자 객체의 인스턴스를 가져옵니다 (0) | 2019.11.02 |
---|---|
[SCALA] 스칼라 메소드 호출에서 괄호에 대한 규칙은 무엇인가? (0) | 2019.11.02 |
[SCALA] 어떻게 스칼라에서 미래를 취소하려면? (0) | 2019.11.02 |
[SCALA] 어떻게 작업을 점화하는 -D 매개 변수 나 환경 변수를 전달하는 방법? (0) | 2019.11.02 |
[SCALA] 스칼라 "<-"이해를위한 (0) | 2019.11.02 |