我有一个功能 foo 这需要另一个功能(比如说 bar)作为参数。有没有办法获取函数名称 bar 作为一个字符串里面 foo?
我有一个功能 foo 这需要另一个功能(比如说 bar)作为参数。有没有办法获取函数名称 bar 作为一个字符串里面 foo?
不,请看 方法和功能之间的区别。方法不作为参数传递 - 它们在传递给其他方法/函数时被扩展为函数对象。这些函数对象是匿名的,编译器生成的类的实例,并且没有名称(或者,至少是匿名类,有一些可以使用反射访问的错误名称,但可能不需要)。
所以,当你这样做时:
def foo() {}
def bar(f: () => Unit) {}
bar(foo)
在最后一次通话中实际发生的事情是:
bar(() => foo())
但理论上,您可以找到正在传递的函数对象的包装方法的名称。你可以做字节码内省来分析它的主体 apply 函数对象的方法 f 在方法中 bar 以上,并根据该方法的名称得出结论。然而,这既是近似也是过度杀伤。
我有一个很好的挖掘,我不认为有。 toString 在函数对象上只是说例如 <function1>,它的类是由编译器生成的合成类,而不是带有的东西 method 你可能在其中查询的对象。
我想如果你真的需要这个,就没有什么可以阻止你实施了 function 有委托的东西,但也知道它委派的东西的名称。