Łuk*_*Lew 4 scala operator-overloading variable-assignment scala-2.8
执行此代码时:
var a = 24
var b = Array (1, 2, 3)
a = 42
b = Array (3, 4, 5)
b (1) = 42
Run Code Online (Sandbox Code Playgroud)
我在这里看到三个(五个?)作业.在这种情况下调用的方法调用的名称是什么?操作员是否超载?
更新:
我可以创建一个类和重载分配吗?(x = y不是x(1)= y)
mic*_*ebe 16
有这个文件:
//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
}
}
Run Code Online (Sandbox Code Playgroud)
跑步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();
()
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,编译器只是将最后一个(b (1) = 42)更改为方法调用:
b.update(1, 42)
Run Code Online (Sandbox Code Playgroud)
作为Michael的 答案的补充,在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3184 次 |
| 最近记录: |