Scala 是否可以获取部分应用的函数的名称?
假设我定义了一个函数:Scala 是否可以获取部分应用的函数的名称?,scala,partial-application,Scala,Partial Application,假设我定义了一个函数: def hello(name:String, words:String) = println("Hello!" + name + words) def p = hello _ 然后我定义了一个部分函数: def hello(name:String, words:String) = println("Hello!" + name + words) def p = hello _ 打印p,显示: (String, String) => Unit = <fu
def hello(name:String, words:String) = println("Hello!" + name + words)
def p = hello _
然后我定义了一个部分函数:
def hello(name:String, words:String) = println("Hello!" + name + words)
def p = hello _
打印p,显示:
(String, String) => Unit = <function2>
(字符串,字符串)=>单位=
没有显示函数名。是否可以从部分函数p
获取原始方法名hello
?否
这是一个我很想拥有的特性,但它有严重的概念问题,比如,当同一个函数有两个名称时,会发生什么情况。。。它应该还是一样的功能,不是吗
回应评论的最新情况:
defp=你好_
def q=p
q的名字是什么?P还是你好?还是普林顿?我很难想象一个简单、一致且有用的解决方案。。。。这实际上是一个“部分应用的函数”,通过调用hello函数匿名创建,而不应用参数。它没有明确的名称显示。最近邮件列表上讨论了一种语言结构,它允许您识别当前使用的方法。它将被称为类似于thisMethod
的东西,并且本质上对方法的作用与thism
对类实例的作用相同
我想看看它是如何与函数交互的(函数与方法是不同的概念)。您的p
是一个匿名函数,它是通过部分应用hello
方法创建的(同样,在这里您需要小心,“部分应用的函数与部分函数
非常不同)。然后调用的实际方法将是对该函数对象应用apply
,在这种情况下,thisMethod
有几种可能的行为方式
无论发生什么情况,
p
只是一个对象引用,不要指望能够将其作为一个名称访问。谢谢!但我不明白函数是如何命名的?我希望有一个方法说getOriMethodName
返回hello
,这会导致一些问题吗?对不起,我是个新手正式地说,我们写的不是函数,而是计算函数的过程。def f(x:Int)=2*x和def g(x:Int)=x+x是两个不同的程序,它们计算相同的函数。但这只是迂腐,我认为这个答案不应该被否决,因为它不符合要求的要点-一个调试工具。将“部分函数”编辑为“部分应用函数”“在标记和问题标题中,这样适当的人就会被吸引(或排斥)这个问题。要添加到Rex的评论中,“部分函数”是一个没有为其域类型中的所有输入定义的函数。cannonical部分函数类似于def(x:Int)=1/x。Scala还有一个PartialFunction特性,如果函数对象想要回答一个指示它们在哪里和没有定义的查询,它们可以实现该特性。这两个概念都不应与部分应用相混淆。