Scala-get函数名
我有一个函数Scala-get函数名,scala,Scala,我有一个函数foo,它接受另一个函数(比如bar)作为参数。是否有方法将bar的函数名作为foo中的字符串获取?否。请参阅。方法不是作为参数传递的,而是在传递给其他方法/函数时扩展为函数对象。这些函数对象是匿名的、编译器生成的类的实例,没有名称(或者,至少是匿名类,有一些损坏的名称,您可以使用反射来访问,但可能不需要) 因此,当您这样做时: def foo() {} def bar(f: () => Unit) {} bar(foo) 在最后一次通话中实际发生的情况是: bar(()
foo
,它接受另一个函数(比如bar
)作为参数。是否有方法将bar
的函数名作为foo
中的字符串获取?否。请参阅。方法不是作为参数传递的,而是在传递给其他方法/函数时扩展为函数对象。这些函数对象是匿名的、编译器生成的类的实例,没有名称(或者,至少是匿名类,有一些损坏的名称,您可以使用反射来访问,但可能不需要)
因此,当您这样做时:
def foo() {}
def bar(f: () => Unit) {}
bar(foo)
在最后一次通话中实际发生的情况是:
bar(() => foo())
但是,从理论上讲,您可以找到正在传递的函数对象正在包装的方法的名称。您可以通过字节码内省来分析上述方法
bar
中函数对象f
的apply
方法的主体,并据此得出该方法的名称。然而,这既是一个近似值,也是一个过度使用。我已经仔细研究过了,我认为没有<函数对象上的code>toString只是表示eg
,它的类是由编译器生成的综合类,而不是内部有方法的对象,您可以查询
我想如果你真的需要这个,那么没有什么可以阻止你用委托的东西实现函数
,但你也知道委托对象的名称。你所说的函数的“名称”到底是什么意思?比如我把一个名为bar的函数传递给foo。在foo内部,我通过参数调用baz接收这个函数。我想打印“bar”,即传入的函数的名称。我无法正确理解可能引发此类问题的思想混乱。@agilesteel-我基本上希望对传入的参数执行类似于toString的操作以获得“bar”。不要认为看其他答案是可能的。如果你描述一下你想这样做的原因,你可能会得到一些有用的替代解决方案。