Rubyにおけるbegin式の一般的な利用方法はrescue節を組み合わせた例外処理です。
しかし、begin式には『式全体の評価値は本体/rescue節/else節のうち最後に評価された文の値』という特徴があります。 1
このbegin式の特性と自己代入演算子(||=
)を組み合わせることでブロックの評価値を変数に代入できます。
begin式を使わずにブロックの評価値を変数にセットする場合、たとえば以下のようになります。
### Procオブジェクトの作成
message_proc = proc {
"Hello"
}
### Procオブジェクトを呼び出し、結果を変数にセット
@message = message_proc.call
@message
=> "Hello"
begin式を利用すると上記のコードは以下のように書き換えられます。
@message ||= begin
"Hello"
end
@message
=> "Hello"
begin...end
の代わりに(...)
を利用してもOKです。
@message ||= (
"Hello"
)
@message
=> "Hello"
なお、begin式では引数を利用できません。引数を利用したい場合はProcオブジェクトを利用します。
Procオブジェクトを利用した方法の詳細解説はProcと自己代入演算子を利用してブロックの評価値を変数に即時代入するで紹介しています。
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!