Scala - 获取函数名称

jef*_*eon 12 scala

我有一个函数foo,它接受另一个函数(比如说bar)作为参数.有没有办法将函数名称bar作为字符串输入foo

axe*_*l22 15

不.查看方法和功能之间区别.方法不作为参数传递 - 它们在传递给其他方法/函数时被扩展为函数对象.这些函数对象是匿名的,编译器生成的类的实例,并且没有名称(或者,至少是匿名类,有一些可以使用反射访问的错误名称,但可能不需要).

所以,当你这样做时:

def foo() {}

def bar(f: () => Unit) {}

bar(foo)
Run Code Online (Sandbox Code Playgroud)

在最后一次通话中实际发生的事情是:

bar(() => foo())
Run Code Online (Sandbox Code Playgroud)

但理论上,您可以找到正在传递的函数对象的包装方法的名称.您可以进行字节码自省来分析上述apply方法中函数对象f方法的主体bar,并根据方法的名称得出结论.然而,这既是近似也是过度杀伤.