私は「Ruby プログラミング言語」を読んでいて、キャッチ/スローを使用してネストされたループから抜け出すために、本 (第 6 章、制御フローの変更、キャッチとスロー) で提供されている例を試してみたかった:
for matrix in data do
catch :missing_data do
for row in matrix do
for value in row do
throw :missing_data unless value
puts value
end
end
end
end
データを 3 つの行列の配列として定義しました。
データ => [[[2, 3, 7], [8, 9, 10], [0, 1, 4]], [["a", "b", "c"], ["d", false, "e"], ["f", "g", nil]], [["abc", "def"], ["ghi", "jkl"]]]
しかし、IRB (バージョン 1.9.3p327) でコードを試すと、「予期しない $end、keyword_end を予期しています」というエラーが発生します。私はコードをいじってみましたが、最も外側の (つまり for) ループを削除すると機能することがわかりましたが、ループでエラーが発生します。再確認するために、より単純なループを作成しました。
for i in [1,2,3] do
catch :two do
if i==2 then throw :two end
end
end
繰り返しますが、同じ状況が発生します: for ループではエラー、for ループなしではエラーなし (実際、IRB を使用すると、最後の 'end' に入る機会がありませんが、4 番目に入った後にエラーが発生します)上の行)。
このエラーが発生する理由を知っている人はいますか?