scala - scala 中的函数字面量表达式

标签 scala

嗨,我是 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/

相关文章:

scala - 使用 Akka Streams 的 worker 池

scala - 无法在 PhantomJSEnv 上运行 scala.js,requiresDOM 设置强制为 false

scala - 此 Scala 代码的功能样式

scala - sbt 组件,包括我的 jar

java - scala 中的 val 与 java 中的 const 有何不同?

遍历 Int 集的算法

java - 在 GAE 上部署 scala 类时出现 classnotfound 异常

scala - 在 Scala 中进行结果分页的更好方法

scala - 在 Scala 中添加泛型类型参数

java - 问题设置为学习编程 future 、 promise 和参与者的资源