从另一个块创建块
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_block
与 block
相同,但是 a
和 b
应该替换为 func(a)
和 func(b)
分别。
这可能吗?
我正在寻找类似以下内容的方法
modified_block = block(func(a), func(b))
这可能对您有用(假设您正在使用 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
是否可以在 ruby 中更改块的参数以创建另一个块?
我有一个函数 say foo
并且我有一个块 say 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))
这可能对您有用(假设您正在使用 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