繁体   English   中英

Scala赋值运算符_ =在特征中不起作用

[英]scala assignment operator _= not working in trait

这是代码:

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

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

scalac抱怨这:

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

我看到scala-swing库经常使用_ =,例如https://github.com/scala/scala-swing/blob/2.0.x/src/main/scala/scala/swing/Label.scala#L28

谢谢!

您需要getter和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

您对这对成员的期望早于以下时间建立:

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

您要分配给一个功能吗? 我不认为_= Swing代码使用的是运算符,我认为这只是一个奇怪的名字……可能是由于一些晦涩难懂的Java兼容性原因导致我此刻不愿。

但是def定义了一个函数,而不是一个值,因此您无法为其分配; 你必须叫它。 查看以下控制台片段:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM