2013-05-22 2 views
0

Я изучаю scala (как это!), Но есть кое-что, что я не понимаю. Я читал о правильном ассоциативном операнде по именам методов, заканчивающихся на «:». Легко понять, но я хотел определить свою собственную ассоциативную функцию с именем add3To :.Scala понимание права ассоциативный операнд

У меня есть SyntaxError и не знают, почему:

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)' to 'Int' - см. [' Implicit class'] (http://docs.scala-lang.org/sips/pending/implicit-classes.html). – senia