我试图了解使用时如何执行操作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
例如,如何使用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] 删除。
我来说两句