我想在Scala中写这个:
var b: Map[String, Int] = Map()
def method() = {
def a_=(i: Int) = b += "method" -> i
// ...
a = 2
}
但是抱怨说a没有定义。这是为什么?我认为a = ...
被重写为a_=(...)
。
解决方案:感谢Jörg,我工作,必须提供吸气剂并使方法达到顶级水平:
var b: Map[String, Int] = Map()
def a_=(i: Int) = b += "method" -> i
def a: Int = ??? // Dummy
def method() = {
// ...
a = 2
}
编译。
答案 0 :(得分:3)
为什么?我认为
a = ...
被重写为a_=(...)
。
没有
object
,class
或trait
的字段访问权。请参阅section 6.15 Assignments of the Scala Language Specifiation(粗体强调我的):
如果
x
是某个模板中定义的无参数函数,而同一模板包含setter函数x_=
作为成员,那么赋值x = e
被解释为该setter函数的调用x_=(e)
。
答案 1 :(得分:0)
你不能覆盖赋值运算符,因为它是一个保留字。你能做的是:
object BAndA {
var b: Map[String, Int] = Map()
def a = b // getter
def a_=(i: Int) = b += "method" -> i // setter
}
object Test extends App {
import BAndA._
a = 1
println(b)
}
getter被要求