2017-06-12 5 views
2

一回限りの再帰のためにRubyで現在実行中のブロックを参照する方法はありますか?たとえば、「深い」はハッシュにマージを実行するために:Ruby:現在実行中のブロックを参照する

hash1.merge(hash2) do |k,o,v| 
    (o.is_a?(Hash) && v.is_a?(Hash)) ? o.merge(v, &CURRENT_BLOCK) : v 
end 

私はちょうど外ブロックを定義し、それを参照することができることを知って、私はちょうどその場でそれを行うことが可能であるかどうかを疑問に思って。

+0

興味深い質問です。 'h2'とは何ですか? –

+0

@EricDuminil私の間違いは、 'h2'は' v'であると考えられました。一定。 –

答えて

1

ルビーでY combinatorのようなものを探していると思います。私は、これは通常のブロックとRubyで行うことが可能であるとは思わないが、あなたはwith lambdas似たようなことが可能です。また

lambda { |x| p x += 1; redo }[0] 

this RosettaCode pageに示すように、あなたは、メソッドやラムダを使用してYコンビネータジェネレータを実装することができます。

関連する問題