3

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

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

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

4

3 回答 3

4

您需要将 Proc 转换为 Block:

blk = Proc.new{puts 1234567890}

def a; yield; end

a(&blk)

1.9.3-194 (main):0 > a(&blk)
1234567890
=> nil
于 2012-09-03T09:00:30.333 回答
2

正如评论中已经写的那样,您可以使用 proc 将 proc 转换为 block &

定义your_proc后,您可以将其作为块参数传递,使用&your_proc

于 2012-09-03T09:01:06.633 回答
0

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

于 2012-09-03T13:35:59.183 回答