Scala 趣题 7

下面程序输出结果是什么? 

package pz007

object Pz007 extends App{

  import collection.mutable.Buffer
  import collection.Seq
  val funcs1 = Buffer[() => Int]()  //create empty  ArrayBuffer
  val funcs2 = Buffer[() => Int]()
  
  {
    val values = Seq(100, 110, 120)  // create a list buffer
    var j = 0
    for (i <- 0 until values.length) {
      funcs1 += (() => values(i))
      funcs2 += (() => values(j))
      j += 1
    }
  }
  
  funcs1 foreach {f1 => println(f1())}
  funcs2 foreach {f2 => println(f2())}
}





























解释: 

首先要立即for表达式是怎么被展开成 foreach函数的。for 表达式中的i会被定义成很多个val,作为foreach函数的参数的参数。因此funcs1中的函数得到的i其实是 0, 1, 2

相反,funcs2中的函数得到的j总是变量j,变量j最后得到的值是3

你可能感兴趣的:(scala)