从另一个块创建块

Create block from another block

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

我有一个函数 say foo 并且我有一个块 say 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))

这可能对您有用(假设您正在使用 procs):

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