2016-10-02 13 views
0

単純に、このコードを繰り返しの少ないバージョンで書くことができますか?それとももっと効率的でしょうか?ブロックが与えられたときにのみブロックを渡す別の方法はありますか?

if block_given? 
    render(*options, &block) 
else 
    render(*options) 
end 
+0

はところで、あなたが役に立つ答えを受け入れるべきである:) –

+0

申し訳ありませんが、ただ受け入れました。ありがとうございます:) – pedrozath

答えて

5

ブロックパラメータを使用してください。両方の状況を処理します。

def foo(*options, &block) 
    bar(*options, &block) 
end 

例:

def bar(*options) 
    p options 
    p yield if block_given? 
end 

foo(1) 
# >> [1] 

foo(2) { 'hello' } 
# >> [2] 
# >> "hello" 
+0

@CarySwoveland:ええ、私は実行可能なスニペットを添付する必要があります。 :) –

+0

不信任者のために: 'def bar(options、&block); block_givenを入れますか? ? block.call(3): "ブロックなし";終わり;終わり。そして 'foo(1){| n | "#{n}盲目のマウス"}#= "3盲目のマウス"と 'foo(1)#=>"ブロックしない "を入れます。あるいは、barが別のメソッドにprocブロックを渡す必要がない場合、 'block.call(3)'は 'yield 3'に置き換えることができます。 (これは以前のコメントの改訂版です。) –

関連する問題