2016-11-22 3 views

답변

3
test(1){ puts "hello" } 

또는

test(1) do 
    puts "hello" 
end 

또는

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

당신은 체크 아웃 할 수있다이

https://pine.fm/LearnToProgram/chap_10.html @Cary Swoveland 우리가 약간 더 깊이 갈 수있는 제안으로.

모든 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