我知道可以在Scala中定义这样的运算符:
class value(var valu:Int) {
def +(i:Int) = { this.valu + i }
def ==>(i:Int ) = { this.valu = i }
}
但我似乎不能像这样重载=运算符:
class value(var valu:Int) {
def =(i:Int) = { this.valu = i }
}
你知道有没有办法做到这一点吗?
生成可变对象的语法并不明显,也不常见,因为可变性通常是不可取的。
class Value(private var valu:Int) {
def update(i:Int) :Unit = valu = i
}
val v = new Value(19)
v() = 52
=
和yield
一样是一个保留字,所以要将其用作标识符,请将其放在backticks中,尽管我怀疑没有人这样做:
scala> class C(var i: Int) { def `=`(n: Int) = i = n }
defined class C
scala> val c = new C(42)
c: C = C@9efcd90
scala> c.`=`(27)
scala> c.i
res1: Int = 27
scala> c `=` 5
scala> c.i
res3: Int = 5
比较:
scala> val yield = 2
^
error: illegal start of simple pattern
scala> val `yield` = 2
yield: Int = 2