将嵌套函数中的Ruby的yield转换为Node.js

时间:2012-09-19 08:13:16

标签: javascript ruby node.js yield

我正在尝试将一大块Ruby代码转换为Node.js.关于yield,有一件特别让我感到难过。代码如下:

each_pair(hash["args"][0]) do |key, value, pair|
   # perform operations
end

...


def each_pair(hash)
    hash["props"].each do |p|
        yield(p["key"], p["value"], p)
    end
end

如果我正确读取此代码,它会说“迭代哈希属性。对于每个元素,回调外部函数并使用给定的p["key"], p["value"], p值执行操作。”

我无法理解Javascript中的外观。我熟悉编写更多琐碎的闭包。转换是否可行?我猜它是这样的:

each_pair(hash["args"][0], function(key, value, pair) {
 // perform operations
}

...

function each_pair(hash, func) {
   hash["props"].forEach(p) {
       func(p["key"], p["value"], p)
   }
}

但是感觉不对......

1 个答案:

答案 0 :(得分:1)

不,这是一个好的翻译。这有点欺骗性,因为ruby中的任何方法都可以使用隐式块来调用。如果它在那里,你可以yield它。如果你暂时不使用它们,那么你会忘记这些简写技巧之一:)

在ruby版本中,您还可以添加&block参数,并将yield(...替换为block.call(...。它在功能上是等同的。