Ruby 从另一个块创建块
在ruby中,是否可以改变一个块的参数来创建另一个块 我有一个类似sayRuby 从另一个块创建块,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
foo
的函数,我有一个由用户传递给我的块sayblock
。现在我想传递一个修改过的块,比如说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