2010-05-04 7 views
7

Je me souviens des méthodes de traitement Scala se terminant par _= spécialement, donc quelque chose comme ceci:méthodes Scala se terminant par _ =

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

X.y = 1 

doivent appeler X.y_=(1). Cependant, 2.8.0 RC1, je reçois un message d'erreur:

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

Fait intéressant, juste essayer d'appeler la méthode sans parenthèses ne réussit pas aussi bien:

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

Suis-je misremembering quelque chose qui existe vraiment ou est-ce que je l'ai juste inventé de tissu entier?

Répondre

13

Ceci est l'un de ces cas de coin dans Scala. Vous ne pouvez pas avoir un setter sans getter et vice versa .

Les travaux suivants: fins

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

Ah, merci! Je vais essayer de m'en souvenir cette fois. –

+1

Vous pouvez certainement avoir l'accesseur sans le mutateur, juste pas un mutateur sans un accesseur correspondant. –

+0

@Randall: Merci, corrigé. (Dunno ce que je pensais quand je l'ai écrit.) – 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> 
Questions connexes