渡す必要があるブロックFile.open
と別のメソッドがありXXobject#read
ます。これら 2 つのメソッドに同じブロックを渡したので、ブロックのコードの重複を避ける方法を見つけたいと思います。
Proc
オブジェクトを定義しようとしましたが、オブジェクトFile.open
を受け入れないようProc
です。なぜだろうと思います。私の知る限り、ブロックはProc
オブジェクトとして保存されます。
Rubyでブロックの重複を避ける方法はありますか?
Proc を Block に変換する必要があります。
blk = Proc.new{puts 1234567890}
def a; yield; end
a(&blk)
1.9.3-194 (main):0 > a(&blk)
1234567890
=> nil
すでにコメントに書かれているように、 を使用して proc をブロックに変換できます&
。
を定義したらyour_proc
、次を使用してブロック引数として渡すことができます&your_proc
proc = Proc.new
&proc
それはブロックです。ブロックはメソッドの引数として使用できます