gpt4 book ai didi

scala - 如何在scala的foreach中执行操作?

转载 作者:行者123 更新时间:2023-12-01 07:03:06 24 4
gpt4 key购买 nike

我试图了解在使用 foreach 时如何执行操作。例如如何使用 foreach

打印 alist 的元素+1
scala>alist = List(1,3,5,7)
scala>alist.foreach(println(_+1)) #=> error: missing parameter type...
scala>alist.foreach(println(_).toInt + 1) #=> error: toInt is not a member of Unit

我知道有其他选择(如下),但我正在尝试是否可以使用 foreach 来完成。

scala>for(x<-alist) println(x+1)  #=> 2,4,6,8
scala>alist.map(x => println(x + 1)) #=> 2,4,6,8

最佳答案

For e.g. how can I add +1 to each element of a list using foreach

编辑:

要回答您更新的问题,您绝对可以使用 foreach:

alist.foreach(x => println(x + 1))

您不能在 println 中使用占位符语法,因为编译器将其推断为:

alist.foreach(x => println(x => x + 1))

根据它的扩展法则。 println 接受 Any 类型的参数,因此它不能使用 plus 方法将其绑定(bind)到具体类型。

如果您对占位符语法规则感兴趣,请参阅 Hidden features of Scala


你不能在 Scala 中使用 foreach 来改变 List[+A],因为列表是不可变的并且 foreach 返回类型是 单位。您可以做的是使用 map 转换从现有列表中投影一个新列表:

scala> val list = List(1,2,3,4)
list: List[Int] = List(1, 2, 3, 4)

scala> val plusOneList = list.map(_ + 1)
plusOneList: List[Int] = List(2, 3, 4, 5)

如果您查看 foreach 的签名,您会发现它采用了一个函数:A => Unit,它采用 A 类型的元素并转换回单元。这个签名是一个副作用方法的标志,因为列表是不可变的,这对我们没有帮助。

如果您使用可变列表,例如 ListBuffer,那么您可以对填充使用副作用:

scala> val listBuffer = mutable.ListBuffer[Int]()
listBuffer: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

scala> (0 to 4).foreach(x => listBuffer += x)

scala> listBuffer
res10: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 1, 2, 3, 4)

关于scala - 如何在scala的foreach中执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429938/

24 4 0
文章推荐: Scala 参与者和持久性上下文
文章推荐: input - perl6 有没有办法进行可编辑的提示输入?
文章推荐: php - jQuery:自动刷新 `
`
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com