反汇编 Scala 代码

Disassembling Scala code

如何反汇编 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

你知道你可以在 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       
...

您对输出进行了一些搜索,因为它包含外部模块和更多信息。