2010-05-04 34 views
7

我似乎記得Scala的治療方法_=結束特別,所以是這樣的:結束Scala的方法_ =

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

X.y = 1 

應該叫X.y_=(1)。然而,在2.8.0 RC1,我得到一個錯誤信息:

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

有趣的是,只是想調用的方法沒有括號失敗,那麼:

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

難道我記錯這不實際存在的東西還是我只是用整塊布發明它?

回答

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

啊,謝謝!我會盡力記住這一次。 – 2010-05-04 13:16:02

+1

你當然可以擁有沒有mutator的訪問器,只是沒有沒有相應訪問器的mutator。 – 2010-05-04 14:01:48

+0

@Randall:謝謝,糾正。 (當我寫這些時,不知道我在想什麼。) – missingfaktor 2010-05-04 14:19:59

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>