我有一个需要传递的块File.open
和另一种方法XXobject#read
。由于我将相同的块传递给这两种方法,我想找到一种方法来避免重复块的代码。
我试图定义一个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 将 proc 转换为 block &
。
定义your_proc
后,您可以将其作为块参数传递,使用&your_proc
proc = Proc.new
&proc
它是块,块可以用作方法的参数