这可能是最初的问题,不仅仅是Scala(我也想知道Java相同),但基本类中基本方法的实现在哪里?例如,乘法运算有一些重载方法,只有关于接口的编写.(https://github.com/scala/scala/blob/2.12.x/src/library/scala/Int.scala#L392-L405)
但是,当我环顾四周时,什么都找不到.我怎么知道它们的实现?
这些方法没有实际实施.对于JVM,这些方法甚至不存在.它们由编译器转换为字节码指令.例如,+on 方法Int被转换为iadd字节码指令.
您可以在REPL中看到scalac生成的字节码:
iload表示"在堆栈上推送局部变量".iadd从堆栈中弹出两个值,将它们添加为好像它们是整数并将结果推回堆栈.
scala> class Foo { def foo(a: Int, b: Int) = a.+(b) }
defined class Foo
scala> :javap -c -p -filter Foo
Compiled from "<console>"
public class Foo {
public int foo(int, int);
Code:
0: iload_1
1: iload_2
2: iadd
3: ireturn
public Foo();
Code:
0: aload_0
1: invokespecial #24 // Method java/lang/Object."<init>":()V
4: return
}
Run Code Online (Sandbox Code Playgroud)
在scala.js的情况下会发生类似的事情,但是生成javascript代码而不是JVM字节码.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |