2012-02-12 20 views
1

構成オプションに応じて、異なるブロック/コンテキスト内で特定のコード部分を実行する必要があるとします。例えば、 Rubyでブロック内のコードを動的にラップする方法は?

if silence 
    silence_stdout do 
    # do something 
    end 
else 
    # do the same thing 
end 

# do somethingコードを繰り返すことなく、これを書くための方法はありますか?

something = -> { do_something } 
if silence 
    silence_stdout &something 
else 
    something.call 
end 

のかの方法でそれを投げる:あなたはまた、内部のロジックを回すことができる

def something 
    # Do something, lots and lots of something. 
end 

if silence 
    silence_stdout &method(:something) 
else 
    something 
end 

答えて

5

どのくらいのコードに応じて、「何かをするには、」あなたがラムダでそれを投げることができています少しだけ:

または最後の1つのメソッドの代わりにクラス全体またはlambdaを使うことができます。

+0

ニースラムダ。 –

+0

ああああ! #3はまさに私が探していたものです。可能でなければならないことは分かっていました。ありがとう。 – user2398029

+0

@ハンター:ありがとう、私は♥λと私は彼らが必要なほど多くの使用を得ることはないと思う。 –

関連する問題