2017-05-18 14 views
2

私が作った単純な 'isPrime'関数を使ってLuaで遊んでいましたが、実際の 'isPrime'関数を無視して次のコードを書きました:Lua:テーブルでの予期しない反復結果

私の期待は、プログラムがすべての単一のキーとそれぞれの値-10から20までを出力すると予想していましたが、代わりに1から20だけが出力されていました。 -10から0まではテーブルに入っていましたが、キーと値のペアを特に確認した後に見つかりましたが、奇妙なことに、決して印刷されませんでした。

これはどうして起こったのですか?私は、Luaがipairs()関数を通してどのように反復し、そのキーにアクセスするかを完全に理解していないと感じています。

答えて

4

ipairs(t)は、キー値のペア(1,t[1]), (2,t[2]), ...を最初のnilの値まで反復します。それはあなたが望むものではありません。ちょうどあなたの最初のループのスタイルを使用し

for i = -10,20 do 
    print(i, out[i]) 
end 
+0

@JackTaylor I _think_(私が正しくRTFM場合)ipairs'は常に最初の 'nil'で停止し'こと。変化する長さ演算子 '# 'です。 – nobody

+0

ああ、あなたは正しかった - 訂正してくれてありがとう!私は確かに#演算子を考えていました。そして、それは私のコメントが本当に役に立つものを実際に加えていないことを意味するので、私はそれを削除しました。 –