Ruby を使い始めたばかりですが、使用しているマニュアルが古くなっているようです。いろいろ調べてみましたが、明確な答えが見つかりませんでした。
マニュアルでは、ループとして機能するメソッド内で「retry」キーワードを使用していましたが、begin/rescue ブロックなしで使用されており、「retry」キーワードを強制的に begin 内に配置すると、動作がかなり異なるように見えます。 /レスキューブロック。
私は多くのことを試みました: リトライ; 終わり;'。-最後のものは、'begin/rescue' ブロックを外部で使用し、メソッドの呼び出しをラップしていました。
マニュアルのロジックに従って、最後のものだけが正常に機能しました。
いくつかの例があります:
マニュアルのコードは次のとおりです。
def WHILE(cond)
return if not cond
yield
retry
end
i=0; WHILE(i<3) {print i; i+=1}
結果: 012
私は次のことを試しました:
def WHILE(cond)
begin
return if not cond
yield
raise
rescue
retry
end
end
i=0; WHILE(i<3) {print i; i+=1}
結果: 無限の数
def WHILE(cond)
return if not cond
yield
end
i=0; begin; WHILE(i<3) {print i; i+=1}; raise; rescue; retry; end
結果:012 (さらに、何も出力しない明らかな無限ループ)
この実存的な疑いからあなたが私を連れて行ってくれることを期待していますが、これが私の結論です.
「retry」キーワードの begin/rescue ブロックの使用が義務化される前は、メソッドの内部にあるにもかかわらずメソッドの呼び出しを繰り返すという、もはや使用できない方法で使用される可能性がありました。
これで、'begin' ステートメントにジャンプするだけです。
しかし、私はこれについて確信が持てず、確認が必要です。もしそうなら、そのような使用を回復するための何らかの形はありますか?
ありがとう。