다이빙의 또는 "코드 블록"). 그 코드가 유효하지만
이
def add10(n)
puts "#{n} + 10 = #{n+10}"
end
def do_something_with_digits(method)
1.upto(9) do |i|
method(i)
end
end
do_something_with_digits(add10)
#=> "1 + 10 = 11"
#=> "2 + 10 = 12"
...
#=> "9 + 10 = 19"
, 그것의 의도 전달하는 방법에 몇 가지 코드를 그 방법은 실행 가진 코드를-인 다음 (무효) 루비 코드가 실제로 일을 잠시
척 Ruby에서 다양한 방법으로 가능합니다. 그 중 하나는 "블록"입니다.
Ruby의 블록은 방법과 매우 흡사합니다 : 블록은 몇 가지 인수를 취하여 해당 코드를 실행할 수 있습니다. foo{ |x,y,z| ... }
또는 foo do |x,y,z| ... end
이 표시 될 때마다 세 개의 매개 변수를 사용하여 ...
을 실행하는 블록입니다. (당신은 심지어 upto
방법은 위의 블록을 전달되는 것을 볼 수 있습니다.)
을 블록은 루비 구문의 특별한 부분이기 때문에, 모든 방법은 블록을 통과 할 수있다. 메서드 이 블록을 사용하는지 여부는 메서드에 달려 있습니다. 방법은 위의 모욕을 발행 할 준비가되어 있지만, 방법은 블록을 호출하지도 만 좋은 메시지가 인쇄 된 블록을 전달
def say_hi(name)
puts "Hi, #{name}!"
end
say_hi("Mom") do
puts "YOU SUCK!"
end
#=> Hi, Mom!
예를 들면 다음과 같습니다.여기에 우리가 방법에서 블록을 호출하는 방법은 다음과 같습니다
def say_hi(name)
puts "Hi, #{name}!"
if block_given?
yield(name)
end
end
say_hi("Mridang") do |str|
puts "Your name has #{str.length} letters."
end
#=> Hi, Mridang!
#=> Your name has 7 letters.
우리는 블록이 함께 여부 전달되었는지 여부를 확인할 수 block_given?
를 사용합니다. 이 경우 우리는 논증을 다시 블록으로 전달했습니다. 블록으로 전달할 항목을 결정하는 것은 사용자의 방법에 달려 있습니다. 예를 들어 :
def say_hi(name)
puts "Hi, #{name}!"
yield(name, name.reverse) if block_given?
end
say_hi("Mridang"){ |str1, str2| puts "Is your name #{str1} or #{str2}?" }
#=> Hi, Mridang!
#=> Is your name Mridang or gnadirM?
그냥 몇 가지 클래스를 그냥 블록에 생성 된 인스턴스를 전달하는 (지원하려는 좋은 일, 한) 대회입니다.
@ SimoneCarletti의 대답을 이해하는 데 도움이되기를 바랍니다. 그러면 앞으로 프로그래밍 할 때 블록을 사용하는 데 도움이 될 것입니다.
당신이 무엇을 요구하는지 확실치 않습니다. A * 이것이 내가 가지고있는 것입니다. * 필요한 코드 스 니펫이 도움이 될 것입니다. – Zabba
안녕 Zabba. RoR에서'new' 메소드를 발견 했으므로 스니 j에서 볼 수 있듯이 매개 변수를 별도의 행으로 전달합니다. 통상은 methodname (param1, param2, param3 등)에 의해 메소드를 호출합니다. –