The Ruby Programming Languagep.164に従って。開始ブロックの値はどのように決定されますか?
begin
文が例外を伝播しない場合は、その文の値 はbegin
、rescue
またはelse
節で最後に評価された式の値です。と句を確保
しかし、私はと一致し、この動作を見つけましたが、一緒else節を持つブロックを開始します。ここ
は、サンプルコードである:
def fact (n)
raise "bad argument" if n.to_i < 1
end
value = begin
fact (1)
rescue RuntimeError => e
p e.message
else
p "I am in the else statement"
ensure
p "I will be always executed"
p "The END of begin block"
end
p value
出力は次のとおり
"I am in the else statement"
"I will be always executed"
"The END of begin block"
"I am in the else statement"
[Finished]
value
をelse節に評価されます。これは、の保証条項が実行された最後のステートメントであるため、一貫性のない動作です。
誰かがbeginブロック内で何が起きているのか説明できますか?
"は、コードのブロックが実行された最後の文のために評価されます"。これは明らかに間違った仮定です。 –
申し訳ありませんが、より具体的な声明と参考資料で修正してください。 – steveyang
これであなた自身が質問に答えました。「開始、レスキュー、その他」は実際に正しい順序です。したがって、これは仕様と一致しています。 –