2010-05-04 4 views
7

나는 스칼라의 치료 방법은 특별히 _=로 끝나는 기억하는 것, 그래서 이런 일이 :스칼라 방법 _ =

object X { var x: Int = 0; def y_=(n : Int) { x = n }} 

X.y = 1 

X.y_=(1)를 호출해야합니다. 뿐만 아니라 단지 괄호없이 메소드를 호출하려고 흥미롭게

<console>:6: error: value y is not a member of object X 
     X.y = 1 
     ^

실패 : 그러나, 2.8.0 RC1에서, 나는 오류 메시지가

scala> X.y_= 1 
<console>:1: error: ';' expected but integer literal found. 
     X.y_= 1 
      ^

가 실제로 존재 뭔가를 misremembering 있습니까 아니면 그냥 천으로 만들어 냈나요?

답변

13

이것은 스칼라의 코너 케이스 중 하나입니다. 게터가 없으면 세터를 사용할 수 없습니다. , 그 반대로 입니다. 잘

다음 작품 :

scala> object X { 
    | var x: Int = 0 
    | def y = x 
    | def y_=(n: Int) { x = n } 
    | } 
defined module X 

scala> X.y = 45 

scala> X.y 
res0: Int = 45 
+1

아, 감사합니다! 나는 이번에 그것을 기억하려고 노력할 것이다. –

+1

mutator가 없어도 접근자를 가질 수 있습니다. 해당 접근자가없는 mutator가 아닙니다. –

+0

@Randall : 감사합니다. (내가 썼을 때 내가 생각하고 있었던 것은 몰라.) – missingfaktor

3
scala> object X { var x: Int = 0; def y_=(n : Int) { x = n }} 
defined module X 

scala> 

scala> X y_= 1 

scala> X.x 
res1: Int = 1 

scala> object X { var x: Int = _; def y = x ; def y_=(n: Int) { x = n } } 
defined module X 

scala> X.y = 1 

scala> X.y 
res2: Int = 1 

scala>