2012-09-19 29 views
0

我試圖將一段Ruby代碼轉換爲Node.js.有一件特別的作品讓我難住,關於yield。該代碼是這樣的:將嵌套函數中的Ruby產出轉換爲Node.js

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

不,這是一個好翻譯。這有點欺騙性,因爲Ruby中的任何方法都可以用一個隱含的塊來調用。如果它在那裏,你可以yield它。這是那些你忘了,如果你不一會兒使用它們速記技巧之一:)

在Ruby版本,你還可以添加一個&block參數,並與block.call(...取代yield(...。它在功能上等同。

+0

很酷,感謝您的驗證。有沒有什麼能夠把這個從「好」翻譯成好的翻譯? – GJTorikian

+0

這是我的JS知識的邊緣,所以也許有人想要......但[JavaScript 1.7](https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.7 )有一個「yield」關鍵字。 –