我有一个功能 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
有委托的东西,但也知道它委派的东西的名称。