我该如何反汇编Scala代码?可以在没有首先构建Jar并对生成的.class文件进行反编译的情况下完成吗?有没有其他更快的方法来做到这一点?
对于Python dis ,可以使用如下:
def myfunc(alist):
return len(alist)
>>> dis.dis(myfunc)
2 0 LOAD_GLOBAL 0 (len)
3 LOAD_FAST 0 (alist)
6 CALL_FUNCTION 1
9 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
你知道你可以在REPL中做到这一点:
scala> def foo[A](xs: Seq[A]) = xs.size
foo: [A](xs: Seq[A])Int
scala> :javap foo
Size 714 bytes
...
public <A extends java/lang/Object> int foo(scala.collection.Seq<A>);
flags: ACC_PUBLIC
Code:
stack=1, locals=2, args_size=2
0: aload_1
1: invokeinterface #20, 1 // InterfaceMethod scala/collection/Seq.size:()I
6: ireturn
...
Run Code Online (Sandbox Code Playgroud)
您已经在输出中抓取了一些内容,因为它包含外部模块和更多信息.