2013-05-22 3 views
0

스칼라를 배우고 있습니다 (그렇지만!)하지만 이해할 수없는 것이 있습니다. ":"로 끝나는 메소드 이름으로 올바른 연관 피연산자를 읽었습니다. 이해하기 쉽지만 add3To :라는 이름의 고유 한 연관 함수를 정의하려고합니다. 내가 바보 같은 실수를했다 (내가 확신)스칼라는 오른쪽 연관 피연산자를 이해합니다.

case class MyInt(x : Int) { 
    def add3 = x+3 

    def add3To:= x+3 // dont understand whats wrong here 
} 

val myInt = MyInt(4) 
println(myInt add3) // working 
println(add3To myInt) // not working 

을 어쩌면 :

는 그 이유를 알고있는 구문 에러를 해달라고! 그러나 나는 그것을 보지 않는다.

답변

2

글자와 구두점 문자 사이에 underscore을 입력해야합니다. add3To_:이 아니라 add3To:입니다.

메서드는 단일 매개 변수 addTo_:(i: Int)을 받아 들여야합니다.

scala> case class MyInt(x : Int) { 
    | def addTo_:(i: Int): Int = x+i 
    | } 
defined class MyInt 

scala> val myInt = MyInt(4) 
myInt: MyInt = MyInt(4) 

scala> 3 addTo_: myInt 
res0: Int = 7 
+0

감사합니다. 그것은 내가 올바른 연관이되고 오직 하나의 피연산자 (add3to myInt)를 취하는 메소드를 정의 할 수 없음을 의미합니까? 귀하의 방법도 내가 "3 addTo myInt"전화 캔트? – chrisf

+0

@chrisf : 1) def add3To (mi : MyInt) = i.x + 3'을 정의하고이를'add3To (myInt)'로 부를 수 있습니다. 2)'addTo (mi : MyInt)'메소드를'Int'에 추가 할 수 있습니다 - ['implicit class'] (http://docs.scala-lang.org/sips/pending/implicit-classes.html)를보십시오. – senia

관련 문제