Могу ли я определить оператор = для моего класса в Scala - PullRequest
1 голос
/ 06 апреля 2020

Я знаю, что можно определить оператор в 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 }
}

знаете, есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

= является зарезервированным словом, таким как yield, поэтому, чтобы использовать его в качестве идентификатора, вы вставляете его в кавычки, хотя я подозреваю, что никто этого не делает:

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
2 голосов
/ 06 апреля 2020

Синтаксис для создания изменяемых объектов не очевиден и встречается не часто, потому что изменчивость обычно нежелательна.

class Value(private var valu:Int) {
  def update(i:Int) :Unit = valu = i
}

val v = new Value(19)
v() = 52
...