下面程序输出结果是什么?
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
时间: 2024-11-24 18:59:19