2016-03-29 10 views
1

Hier ist der Code:scala Zuweisungsoperator _ = nicht in Zug arbeiten

trait MacApp { 
    def dockerIcon_=(s: String) = println("setting docker icon...") 
} 

object Main extends App with MacApp { 
    dockerIcon = "apple" 
} 

Die scalac beklagt dies:

Main.scala:6: error: not found: value dockerIcon 
    dockerIcon = "apple" 
     ^
one error found 

Ich sehe scala-Swing-Bibliothek Verwendung _ = viel, zum Beispiel, https://github.com/scala/scala-swing/blob/2.0.x/src/main/scala/scala/swing/Label.scala#L28

Danke!

Antwort

7

Sie benötigen beide Getter und Setter:

scala> :pa 
// Entering paste mode (ctrl-D to finish) 

trait MacApp { 
    def dockerIcon_=(s: String) = println("setting docker icon...") 
    def dockerIcon = 42 
} 
object Main extends App with MacApp { 
    dockerIcon = "apple" 
} 

// Exiting paste mode, now interpreting. 

defined trait MacApp 
defined object Main 

scala> Main main null 
setting docker icon... 

http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#assignments

Ihre Erwartungen an das Paar von Elementen eingerichtet sind früher auf:

http://www.scala-lang.org/files/archive/spec/2.11/04-basic-declarations-and-definitions.html#variable-declarations-and-definitions

+0

Im Bereich Zuweisungen, wo heißt es, ich brauche einen Getter (?) Wie 'def dockerIcon = 42'? Ich konnte es nicht finden. – draw

+0

nur für den Fall, dass Sie meinen Kommentar nicht sehen @ som-snytt – draw

+0

'wenn x eine parameterlose Methode ist' bedeutet, Sie haben eine 'def x = 42' (und nicht eine' def x() = 42'). –

-1

Sie versuchen, eine Funktion zuzuordnen? Ich denke nicht, dass _= Swing-Code einen Operator verwendet, ich denke, es ist nur ein seltsamer Name ... möglicherweise für einen obskuren Java-Kompatibilitätsgrund, der mir im Moment entgeht.

Aber def definiert eine Funktion, kein Wert, so dass Sie nicht zuweisen können; Du musst es anrufen. Sehen Sie sich diese Konsole Fragment aus:

scala> def text_=(s: String) = s + "foo" 
text_$eq: (s: String)String 

scala> text_=("bar") 
res3: String = barfoo 
+0

Siehe den Link in Som-Snytt Antwort. –

+0

Ja, ich habe Som-Snytt's Antwort aufgehoben; es ist besser als meins. – MaggieL