當執行該代碼:分配方法斯卡拉
var a = 24
var b = Array (1, 2, 3)
a = 42
b = Array (3, 4, 5)
b (1) = 42
我在這裏看到的三(5?)分配。在這種情況下調用的方法調用的名稱是什麼? 運營商是否超載?
更新:
我可以創建類和重載分配嗎? (X = Y不是X(1)= Y)
當執行該代碼:分配方法斯卡拉
var a = 24
var b = Array (1, 2, 3)
a = 42
b = Array (3, 4, 5)
b (1) = 42
我在這裏看到的三(5?)分配。在這種情況下調用的方法調用的名稱是什麼? 運營商是否超載?
更新:
我可以創建類和重載分配嗎? (X = Y不是X(1)= Y)
有了這個文件:
//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)
補充0 answer,在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
謝謝。非常有用的答案。 – 2010-05-11 14:27:34