scala学习笔记(十二):for循环及translated

     scala中有许多方式去循环集合for loops, while loops, 和集合中的方法诸如 foreach, map, flatMap,这节主要说明for的用法和for的翻译(translated)

     1、for的用法

     

   val a = Array("apple","banana", "orange")
   //for 循环
   for(item <- a) println(item)
   
   for(item <- a){
   		val s = item.toUpperCase()
   		println(s)
   }
   
   //带有返回值的for循环
   for(item <- a) yield item.toUpperCase() foreach print
   //val new_a = for(item <- a) yield item.toUpperCase()
   println
   //使用数字循环数组
   for(item <- 0 until a.length ) println(s"$item is ${a(item)}")
   
   //Scala集合还提供了一个zipWithIndex方法,您可以使用它们来创建一个循环计数器
   for((e, count) <- a.zipWithIndex ) println(s"$count is $e")
   //使用if守卫来进行判断过滤
   for((e, count) <- a.zipWithIndex if e.contains("e")) println(s"$count is $e")
   
   //Looping over a Map
   val map = Map("fname" -> "Robert", "lname" -> "Goren")
   
   for((key,value) <- map) println(s"$key=$value")

   2、for的翻译(translated)

   /**
    * How for loops are translated
    * 使用scalac -Xprint:parse ForScala.scala 来进行编译
    * 1、for循环遍历 被转换成foreach方法调用的集合
    * source:
    *     for (i <- 1 to 10) println(i)
    * compiler:
    *   1.to(10).foreach(((i) => println(i)))
    * 2、for循环中的if守护条件其实是使用了withFilter调用序列的集合
    * source:
    *     for (i <- 1 to 10 if i < 5) println(i)
    * compiler:
    *     1.to(10).withFilter(((i) => i.$less(5))).foreach(((i) => println(i)))
    * 3、for循环中的yield表达式被转换成map方法调用的集合
    * source:
    *     for (i <- 1 to 10) yield i * 2
    * compiler:
    *     1.to(10).map(((i) => i.$times(2)))
    * 4、for循环中既包含if守护又包含yield转换成 先withFilter调用序列的集合 在map方法调用的集合
    */



 

猜你喜欢

转载自gbjian001.iteye.com/blog/2352782