从另一个块创建块

时间:2016-02-28 11:02:38

标签: ruby block proc

在ruby中是否可以更改块的参数以创建另一个块?

我有一个像foo这样的功能,并且我有一个阻止用户传递给我的块block。现在我想传递foo一个修改过的块modified_block,这与block类似,但有一点不同。

假设block定义如下。它可以是任何东西,因为它是由用户传递的。

block = { |a,b| a <=> b }

我希望我的修改过的块像这样

modified_block = { |a,b| func(a) <=> func(b) }

所以,我基本上希望我的modified_blockblock相同,但ab应替换为func(a)func(b)分别。

这可能吗?

我正在寻找类似下面的东西

modified_block = block(func(a), func(b))

1 个答案:

答案 0 :(得分:1)

这可能适合您(假设您正在使用proc s):

def func(a)
 0 - a
end

block = ->(a,b) { a <=> b}

modified_block = ->(a,b) { block.call(func(a), func(b)) }

block.call(1,2)
# => -1

modified_block.call(1,2)
# => 1