【发布时间】:2016-02-28 11:02:38
【问题描述】:
是否可以在 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))
【问题讨论】:
-
为什么要修改区块?最后一个例子对你没有用吗?
-
不,最后一个例子没有奏效。它引发了
undefined local variable or method 'a' for main:Object -
你不能传递一个块,因为它不是一个对象。你可以传递一个 Proc 对象。
-
@sawa 对不起。我在阅读后意识到它应该是必须通过的proc。无论如何,我的问题有解决方案吗?