[Ruby]クロージャーを使ってブロックを1回だけ実行する

こんにちは、hachi8833です。BPS Advent Calendarの合間を縫うように通常記事もお送りいたします。 高林哲さんの昔のブログ「Ruby: 一回だけ実行されるブロック」を読んでて、「Procかlambdaでクロージャを作れば、もう少し簡潔にできるのでは?」と思ったのでやってみました。 run_onceメソッド ここではlambdaを使ってみました。 やってみると教科書のコードサンプルみたいな簡潔さです。アラートを最初の1回だけ表示するヘルパーメソッドなんかに使えそうです。 うれしい反面ちょっとさみしいので、YARD記法も足してみました。 コード # Runs a block only once # @param the block to run # @return the object that is returned from the block first; nil after that def run_once(&block) count = 1 lambda do return if count == nil count = nil yield end end 当初、lambdaを略記法「->」で書いてましたが、後続のブロックが複数行なら略記ではなくlambdaと書くのがスタイルであるという指摘をmorimorihogeさんからいただいたので、改めました。 … Continue reading [Ruby]クロージャーを使ってブロックを1回だけ実行する