【发布时间】:2011-06-27 22:06:44
【问题描述】:
这里有一个小 Scala 会话,它定义并尝试了一些函数:
scala> def test1(str: String) = str + str;
test1: (str: String)java.lang.String
scala> test1("ab")
res0: java.lang.String = abab
效果很好。
scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
val test2 = test1
^
哎呀。
scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>
scala> test2("ab")
res1: java.lang.String = abab
效果很好!
现在,我在折叠时看到了_ 语法(_ + _ 等)。所以据我了解_ 基本上意味着“一个论点”。所以test1 _ 基本上是指一个带有参数的函数,它被赋予test1"。但是为什么这与test1 不一样完全?为什么会有区别,如果我追加_?
所以我一直在探索……
scala> val test3 = (str: String) => str + str
test3: (String) => java.lang.String = <function1>
scala> test3("ab")
res2: java.lang.String = abab
scala> val test4 = test3
test4: (String) => java.lang.String = <function1>
在没有_ 的情况下它可以工作! defed 函数和 valed 函数有什么区别?
【问题讨论】:
-
雷克斯,我会为你节省一些时间。您已经在 2010 年 1 月 27 日的邮件列表中回答了这个问题。这是一个很好的反应,所以我把它加了书签。 scala-programming-language.1934581.n4.nabble.com/…
-
我认为在 Scala 中使用术语“函数”/“定义函数”存在一些令人遗憾的混淆。甚至 在 Scala 中编程 都说
def定义了一个函数,但这并不完全正确,具体取决于您对“函数”的定义。 IE。方法返回的结果是其参数的函数,但该方法不是函数值 或函数对象。区分“函数”一词的这两种用法可能会有所帮助。 -
阅读我在 10 年 4 月的类似问题中的retronyms 答案。 stackoverflow.com/questions/2720486/… - (ps,我QRd你的头像,很有趣!)
-
简而言之 - 功能与方法