How to perform an operation in scala's foreach?

前端 未结 4 1846
时光取名叫无心
时光取名叫无心 2021-01-21 03:33

I am trying to understand how to perform an operation when using foreach. For e.g. how can I print element+1 of alist using foreach

4条回答
  •  心在旅途
    2021-01-21 04:08

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

    Edit:

    To answer your updated question, you can definitely use foreach:

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

    You can't use placeholder syntax inside println since the compler infers it as:

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

    According to it's expansion laws. println takes a parameter of type Any, so it can't bind it to a concrete type with a plus method.

    If you're interested in the rules of placeholder syntax, see Hidden features of Scala


    You cannot mutate a List[+A] using foreach in Scala, since lists are immutable and foreach return type is Unit. What you can do is project a new list from an existing one using the map transformation:

    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)
    

    If you look at the signature for foreach, you see that it takes a function: A => Unit, which takes an element of type A and projects back a Unit. This signature is a sign for a side effecting method and since list is immutable, that doesn't help us.

    If you used a mutable list, such as ListBuffer, then you could use side effects for population:

    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)
    

提交回复
热议问题