如何在Scala的foreach中执行操作?

巴拉

我试图了解使用时如何执行操作foreach对于如我怎么能打印的元素+ 1alist使用foreach

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 
尤瓦尔·伊茨恰科夫(Yuval Itzchakov)

例如,如何使用foreach将+1添加到列表的每个元素

编辑:

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

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

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

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

根据它的扩展规律。println接受type的参数Any,因此无法使用plus方法将其绑定到具体类型。

如果您对占位符语法规则感兴趣,请参见Scala的隐藏功能


您无法在Scala中更改List[+A]using foreach,因为列表是不可变的,foreach返回类型为Unit您可以做的是使用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类型的元素并向后投射一个Unit。此签名是一种副作用方法的标志,并且由于list是不可变的,因此对我们没有帮助。

如果您使用了可变列表(例如)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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章