在ruby中是否可以更改块的参数以创建另一个块?
我有一个像foo
这样的功能,并且我有一个阻止用户传递给我的块block
。现在我想传递foo
一个修改过的块modified_block
,这与block
类似,但有一点不同。
假设block
定义如下。它可以是任何东西,因为它是由用户传递的。
block = { |a,b| a <=> b }
我希望我的修改过的块像这样
modified_block = { |a,b| func(a) <=> func(b) }
所以,我基本上希望我的modified_block
与block
相同,但a
和b
应替换为func(a)
和func(b)
分别。
这可能吗?
我正在寻找类似下面的东西
modified_block = block(func(a), func(b))
答案 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