0

我正在尝试将一块 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)
   }
}

但是感觉有些不对...

4

1 回答 1

0

不,这是一个不错的翻译。这有点欺骗性,因为 ruby​​ 中的任何方法都可以使用隐式块调用。如果它在那里,你可以yield。如果您有一段时间不使用它们,这是您忘记的速记技巧之一 :)

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

于 2012-09-19T17:21:25.923 回答