我正在尝试将一大块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)
}
}
但是感觉不对......
答案 0 :(得分:1)
不,这是一个好的翻译。这有点欺骗性,因为ruby中的任何方法都可以使用隐式块来调用。如果它在那里,你可以yield
它。如果你暂时不使用它们,那么你会忘记这些简写技巧之一:)
在ruby版本中,您还可以添加&block
参数,并将yield(...
替换为block.call(...
。它在功能上是等同的。