Ruby 从另一个块创建块

Ruby 从另一个块创建块,ruby,block,proc,Ruby,Block,Proc,在ruby中,是否可以改变一个块的参数来创建另一个块 我有一个类似sayfoo的函数,我有一个由用户传递给我的块sayblock。现在我想传递一个修改过的块,比如说modified_block,它类似于block,但有一点不同 假设块定义如下。它可以是任何东西,因为它是由用户传递的 block = { |a,b| a <=> b } 这可能适合您(假设您使用的是procs): 定义函数(a) 0-a 结束 block=->(a,b){ab} 修改的_block=->(a,b){bl

在ruby中,是否可以改变一个块的参数来创建另一个块

我有一个类似say
foo
的函数,我有一个由用户传递给我的块say
block
。现在我想传递一个修改过的块,比如说
modified_block
,它类似于
block
,但有一点不同

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

block = { |a,b| a <=> b }
这可能适合您(假设您使用的是
proc
s):

定义函数(a) 0-a 结束 block=->(a,b){ab} 修改的_block=->(a,b){block.call(func(a),func(b))} 阻塞呼叫(1,2) # => -1 修改的块调用(1,2) # => 1
为什么要修改块?最后一个例子对你不起作用吗?不,最后一个例子不起作用。它为main:Object引发了
未定义的局部变量或方法“a”
无法传递块,因为它不是对象。您可以传递一个Proc对象。@sawa对不起。在阅读之后,我意识到必须通过的应该是proc。不管怎样,我的问题有解决办法吗?
modified_block = { |a,b| func(a) <=> func(b) }
modified_block = block(func(a), func(b))
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