gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:19:31 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com