Назначить метод в Scala
При выполнении этого кода:
var a = 24
var b = Array (1, 2, 3)
a = 42
b = Array (3, 4, 5)
b (1) = 42
Я вижу три (пять?) задания здесь. Как называется вызов метода, который вызывается в таких обстоятельствах? Это перегрузка оператора?
Обновление:
Можно ли создать класс и перегрузить назначение? ( x = y не x (1) = y)
2 ответа:
Имея этот файл:
//assignmethod.scala object Main { def main(args: Array[String]) { var a = 24 var b = Array (1, 2, 3) a = 42 b = Array (3, 4, 5) b (1) = 42 } }
Бег
scalac -print assignmethod.scala
дает нам:[[syntax trees at end of cleanup]]// Scala source: assignmethod.scala package <empty> { final class Main extends java.lang.Object with ScalaObject { def main(args: Array[java.lang.String]): Unit = { var a: Int = 24; var b: Array[Int] = scala.Array.apply(1, scala.this.Predef.wrapIntArray(Array[Int]{2, 3})); a = 42; b = scala.Array.apply(3, scala.this.Predef.wrapIntArray(Array[Int]{4, 5})); b.update(1, 42) }; def this(): object Main = { Main.super.this(); () } } }
Как вы можете видеть, компилятор просто изменяет последний (
b (1) = 42
) на вызов метода:b.update(1, 42)
Дополняя Майкла Ответ , присваивание не может быть переопределено в Scala, хотя вы можете создать оператор, подобный присваиванию, например
:=
."назначения", которые могут быть переопределены:
// method update a(x) = y // method x_=, assuming method x exists and is also visible a.x = y // method +=, though it will be converted to x = x + y if method += doesn't exist a += y