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 是否可以获取部分应用的函数的名称?_Scala_Partial Application - Fatal编程技术网

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特性,如果函数对象想要回答一个指示它们在哪里和没有定义的查询,它们可以实现该特性。这两个概念都不应与部分应用相混淆。