FileとかSerialPortなんかで採用されてるインタフェイスは綺麗ですよね。
クラスを生成しなくともブロック呼べばスマートに開閉してくれます。
こういうものを実装するにはブロック引数とinstance_evalメソッドを使います。
コード
クラス本体
class Test def initialize @cmd = [] end def handle(command) @cmd << command end def run @cmd.each {|i| puts i } end def self.run(&block) tst = Test.new tst.instance_eval(&block) tst.run end end
実行用
Test.run do handle "first" handle "second" end
結果
$ ruby selfblock.rb first second
insetance_evalはinstance_eval()を使うとブロック内でメソッドを呼び出せる - Bye Bye Mooreのような使い方もできます。
参考もと
Rubyベストプラクティス -プロフェッショナルによるコードとテクニック
- 作者: Gregory Brown,高橋征義,笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/03/26
- メディア: 大型本
- 購入: 9人 クリック: 307回
- この商品を含むブログ (49件) を見る