【问题标题】:Create block from another block从另一个块创建块
【发布时间】: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_blockblock 相同,但ab 应该分别替换为func(a)func(b)

这可能吗?

我正在寻找可以解决问题的方法

modified_block = block(func(a), func(b))

【问题讨论】:

  • 为什么要修改区块?最后一个例子对你没有用吗?
  • 不,最后一个例子没有奏效。它引发了undefined local variable or method 'a' for main:Object
  • 你不能传递一个块,因为它不是一个对象。你可以传递一个 Proc 对象。
  • @sawa 对不起。我在阅读后意识到它应该是必须通过的proc。无论如何,我的问题有解决方案吗?

标签: ruby block proc


【解决方案1】:

这可能对你有用(假设你正在使用procs):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多