2016-11-22 7 views

答えて

3
test(1){ puts "hello" } 

または

test(1) do 
    puts "hello" 
end 

または

blk = proc{ puts "hello" } 
test(1, &blk) 

@Cary Swovelandたちはやや深い行くことができます示唆したように、このhttps://pine.fm/LearnToProgram/chap_10.html

をチェックアウトすることができます。

すべてのRubyメソッドは、暗黙的にブロックを受け入れることができます。そして、あなたがあなたのメソッドのシグネチャでそれを定義しなかったとしても、あなたはまだそれを捕捉し、さらに渡すことができます。

だから、私たちはあなたの方法で、次の操作を行うことができ、このアイデアを考慮:

def test(args, &block) 
    yield 
end 

def test(args) 
    yield 
end 

あなたが持っている
def test(args) 
    block = Proc.new 
    block.call 
end 

と同じと同じですこの暗黙的なブロックキャプチャでは、おそらく余分なチェックを追加したいでしょう:

def test(args) 
    if block_given? 
    block = Proc.new 
    block.call 
    else 
    "no block" 
    end 
end 

又は

def test(args) 
    if block_given? 
    yield 
    else 
    "no block" 
    end 
end 

したがって、これらのメソッドを呼び出すと、以下の戻ります

test("args") 
#=> no block 
test("args"){ "Hello World" } 
#=> "Hello World" 
+0

が完了@CarySwovelandを – fl00r

関連する問題