有没有办法避免Ruby中的重复块?

时间:2012-09-03 08:53:48

标签: ruby block

我有一个块需要传递给File.open和另一个方法XXobject#read。由于我将同一个块传递给这两个方法,我想找到一种避免重复块代码的方法。

我尝试定义Proc对象,但File.open似乎不接受Proc对象。我想知道为什么。据我所知,一个块存储为Proc对象。

有没有办法避免Ruby中的重复块?

3 个答案:

答案 0 :(得分:4)

您需要将Proc转换为Block:

blk = Proc.new{puts 1234567890}

def a; yield; end

a(&blk)

1.9.3-194 (main):0 > a(&blk)
1234567890
=> nil

答案 1 :(得分:2)

正如评论中所写,您可以使用&将proc转换为阻止。

一旦定义了your_proc,就可以使用&your_proc

将其作为块参数传递

答案 2 :(得分:0)

proc = Proc.new &proc  它是块,块可以用作方法的参数