使用scala跟踪函数依赖性

时间:2016-04-04 23:17:43

标签: java scala bytecode java-bytecode-asm

我正试图想出一种散列scala函数的方法。也就是说,如果函数没有改变,我希望能够为运行时之间一致的函数生成一个哈希值,但如果逻辑以任何方式改变,那么它就会不同。

匿名scala函数将各自生成自己的.class文件。它类似于类名,类似于“package.Main $$ anonfun $ 2”。你可以得到一个句柄并将字节哈希就好了。但是,这只是深入一层。

如果这个

val nested = (x:Int) => x + 1
val f = (x:Int) => nested(x) + 1

更改为此

val nested = (x:Int) => x + 2
val f = (x:Int) => nested(x) + 1

然后嵌套的类文件会改变,但f的类文件不会改变。我试图找出如何找出嵌套的类文件,如果你只有f的引用。

我一直在尝试使用ASM库,到目前为止我还没有得到我想要的东西。在这个例子中,嵌套的类名称类似于“package.Main $$ anonfun $ 1”,而f将具有类名“package.Main $$ anonfun $ 2”。从f开始我知道它的类名,但是使用ASM类/字段/方法访问者遍历它所有我得到的是“嵌套$ 1”而不是“package.Main $$ anonfun $ 1”就像我想要的那样。 有人有任何想法吗?

0 个答案:

没有答案