Как я могу написать функцию, которая имитирует цикл 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
Я хочу напечатать все элементы обр. Я могу сделать это со следующим кодом:
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?
Заранее благодарим за советы.