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関数を使用して同じことをしたいと思います。しかし、変数を参照してそれを変更する関数を書くことはできません。たとえば、要素が1つだけの配列を使用してそれを渡すことができました
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要素を出力するにはどうすればよいですか?
アドバイスをよろしくお願いします。