【发布时间】:2012-10-31 03:52:48
【问题描述】:
如何编写模拟while循环的函数?它需要 2 个参数:执行条件和表达式。
我尝试了以下方法:
val whileLoop: (Boolean,Any)=>Unit = (condition:Boolean, expression:Any) => {
expression
if(condition) whileLoop(condition,expression)
() }
但它似乎不起作用,例如我有数组:
val arr = Array[Int](-2,5,-5,9,-3,10,3,4,1,2,0,-20)
我还有变量 i:
var i = 0
我想打印 arr 的所有元素。我可以用以下代码做到这一点:
while(i<arr.length) { println(tab(i)); i+=1 }
我想使用我的 whileLoop 函数来做同样的事情。但我不能编写引用变量并修改它的函数。我可以使用只有一个元素的数组来传递它,例如
val nr = Array(0)
和功能:
val printArray: Array[Int]=>Unit = (n:Array[Int]) => {
println(arr(n(0)))
n(0)+=1
()
}
然后在我的 whileLoop 中使用:
whileLoop(nr(0)<arr.length, printArray)
使用上述代码后,我得到 StackOverflowError 并且 nr(0) 等于零。还有以下功能:
val printArray: Array[Int]=>Unit = (n:Array[Int]) => {
println(arr(nr(0)))
nr(0)+=1
()
}
给出相同的结果。
如何编写正确的函数 whileLoop 并使用它来打印所有 arr 元素?
提前感谢您的建议。
【问题讨论】:
标签: function scala while-loop