Ruby-블록
루비가 몇 개의 문을 넣을 수있는 메서드를 정의하고 그 메서드를 호출하는 방법을 보았습니다. 마찬가지로 Ruby에는 Block이라는 개념이 있습니다.
블록은 코드 덩어리로 구성됩니다.
블록에 이름을 지정합니다.
블록의 코드는 항상 중괄호 ({})로 묶여 있습니다.
블록은 항상 블록과 이름이 같은 함수에서 호출됩니다. 당신이 이름을 가진 블록이있는 경우 있음이 수단 테스트를 , 다음 함수 사용 테스트는 이 블록을 호출합니다.
yield 문 을 사용하여 블록을 호출합니다 .
통사론
block_name {
statement1
statement2
..........
}
여기에서는 간단한 yield 문 을 사용하여 블록을 호출하는 방법을 배웁니다 . 또한 블록을 호출하기위한 매개 변수와 함께 yield 문 을 사용하는 방법을 배웁니다 . 두 가지 유형의 yield 문으로 샘플 코드를 확인합니다 .
수율 진술
yield 문 예를 살펴 보겠습니다.
#!/usr/bin/ruby
def test
puts "You are in the method"
yield
puts "You are again back to the method"
yield
end
test {puts "You are in the block"}
이것은 다음 결과를 생성합니다-
You are in the method
You are in the block
You are again back to the method
You are in the block
yield 문으로 매개 변수를 전달할 수도 있습니다. 여기에 예가 있습니다-
#!/usr/bin/ruby
def test
yield 5
puts "You are in the method test"
yield 100
end
test {|i| puts "You are in the block #{i}"}
이것은 다음 결과를 생성합니다-
You are in the block 5
You are in the method test
You are in the block 100
여기서 yield 문이 쓰여지고 매개 변수가 뒤 따릅니다. 둘 이상의 매개 변수를 전달할 수도 있습니다. 블록에서 매개 변수를 허용하기 위해 두 개의 수직선 (||) 사이에 변수를 배치합니다. 따라서 앞의 코드에서 yield 5 문은 값 5를 매개 변수로 테스트 블록에 전달합니다.
이제 다음 문장을보세요.
test {|i| puts "You are in the block #{i}"}
여기서 값 5는 변수 i에 수신됩니다 . 이제 다음 puts 문을 살펴보십시오.
puts "You are in the block #{i}"
이 puts 문의 출력 은-
You are in the block 5
둘 이상의 매개 변수를 전달하려는 경우 yield 문은 다음과 같습니다 .
yield a, b
그리고 블록은-
test {|a, b| statement}
매개 변수는 쉼표로 구분됩니다.
블록 및 방법
블록과 메소드가 어떻게 서로 연관 될 수 있는지 살펴 보았습니다. 일반적으로 블록과 이름이 같은 메서드에서 yield 문을 사용하여 블록을 호출합니다. 그러므로 당신은 다음과 같이 쓴다.
#!/usr/bin/ruby
def test
yield
end
test{ puts "Hello world"}
이 예제는 블록을 구현하는 가장 간단한 방법입니다. yield 문 을 사용하여 테스트 블록을 호출합니다 .
그러나 메소드의 마지막 인수 앞에 &가 오면이 메소드에 블록을 전달할 수 있으며이 블록은 마지막 매개 변수에 할당됩니다. *와 &가 모두 인수 목록에있는 경우 &는 나중에 와야합니다.
#!/usr/bin/ruby
def test(&block)
block.call
end
test { puts "Hello World!"}
이것은 다음 결과를 생성합니다-
Hello World!
BEGIN 및 END 블록
모든 Ruby 소스 파일은 파일이로드 될 때 (BEGIN 블록) 및 프로그램 실행이 완료된 후 (END 블록) 실행될 코드 블록을 선언 할 수 있습니다.
#!/usr/bin/ruby
BEGIN {
# BEGIN block code
puts "BEGIN code block"
}
END {
# END block code
puts "END code block"
}
# MAIN block code
puts "MAIN code block"
프로그램에는 여러 BEGIN 및 END 블록이 포함될 수 있습니다. BEGIN 블록은 발견 된 순서대로 실행됩니다. END 블록은 역순으로 실행됩니다. 실행되면 위의 프로그램은 다음과 같은 결과를 생성합니다.
BEGIN code block
MAIN code block
END code block