Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-get函数名_Scala - Fatal编程技术网

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”。不要认为看其他答案是可能的。如果你描述一下你想这样做的原因,你可能会得到一些有用的替代解决方案。