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

いいえ、それは OK の翻訳です。Ruby のどのメソッドも暗黙のブロックで呼び出すことができるため、少し欺瞞的です。そこにあれば、できますyield。これは、しばらく使わないと忘れてしまう簡単なトリックの 1 つです :)

ruby 版では、引数を追加して&blockに置き換えることもできます。機能的には同等でしょう。yield(...block.call(...

于 2012-09-19T17:21:25.923 に答える