嗨,我是 Scala 新手,有一个问题。
当我在 for 循环中指定函数文字的非缩写版本时,scala 不会对其执行任何操作。
例如
val myList = List("one","two","tree","four","five")
//compiles but does not print anything
for (arg <- lst) (arg:String) => {println(arg)}
//does print one, two, tree, four,five on separated lines
lst.foreach((arg:String) => {println(arg)})
另一方面,for 循环中上述函数文字 ( println(arg) ) 的缩写版本似乎确实按预期工作:
val myList = List("one","two","tree","four","five")
//does print one, two, tree, four,five on separated lines
for (arg <- lst) println(arg)
这是一个错误还是我误解了什么? 非常感谢
最佳答案
这不是 Scala 中的错误。当您指定函数时,如下所示:
for (arg <- lst) (arg:String) => {println(arg)}
那么 Scala 确实没有用它做任何事情,因为你只指定了函数 - 你没有告诉 Scala 实际调用该函数。您的 for
循环基本上意味着:“对于 lst
中的每个元素,声明此函数”。
您必须指定您希望调用该函数:
for (arg <- lst) ((arg:String) => {println(arg)})(arg)
这读作:“对于 lst
中的每个元素,声明此函数并使用 arg
调用它”。
注意与 foreach
的区别:
lst.foreach((arg:String) => {println(arg)})
这意味着:“在 lst
上调用 foreach
,并将此函数传递给它” - foreach
然后将为每个调用该函数lst
中的元素。
关于scala - scala 中的函数字面量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658033/