English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
귀하께는 Ruby가 어떻게 메서드를 정의하고 메서드를 호출하는지 알고 계십니다. 유사하게, Ruby는 블록의 개념이 있습니다.
block_name{ statement1 statement2 .......... }
在这里,您将学到如何使用一个简单的 yield 语句来调用块。您也将学到如何使用带有参数的 yield 语句来调用块。在示例中,您将看到这两种类型的 yield 语句。
让我们看一个 yield 语句的示例:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test puts "在 test 方法内" yield puts "你又回到了 test 方法内" yield end test {puts "你在块内"}
위 예제의 실행 결과는 다음과 같습니다:
在 test 方法内 你在块内 你又回到了 test 方法内 你在块内
您也可以传递带有参数的 yield 语句。下面是一个示例:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test yield 5 puts "在 test 方法内" yield 100 end test {|i| puts "你在块 #{i} 内"}
위 예제의 실행 결과는 다음과 같습니다:
你在块 5 内 在 test 方法内 你在块 100 内
在这里,yield 语句后跟着参数。您甚至可以传递多个参数。在块中,您可以在两个竖线之间放置一个变量来接受参数。因此,在上面的代码中,yield 5 语句向 test 块传递值 5 作为参数。
现在,看下面的语句:
test {|i| puts "你在块 #{i} 内"}
在这里,值 5 会在变量 i 中收到。现在,观察下面的 puts 语句:
puts "你在块 #{i} 内"
这个 puts 语句的输出是:
你在块5 内
如果您想要传递多个参数,那么 yield 语句如下所示:
yield a, b
此时,块如下所示:
test {|a, b| statement}
参数使用逗号分隔。
您已经看到块和方法之间是如何相互关联的。您通常使用 yield 语句从与其具有相同名称的方法调用块。因此,代码如下所示:
#!/usr/bin/ruby def test yield end test{ puts "Hello world"}
本示例是实现块的最简单的方式。您使用 yield 语句调用 test 块。
但是如果方法的最后一个参数前带有 &,那么您可以向该方法传递一个块,且这个块可被赋给最后一个参数。如果 * 和 & 同时出现在参数列表中,& 应放在后面。
#!/usr/bin/ruby def test(&block) block.call end test { puts "Hello World!"}
위 예제의 실행 결과는 다음과 같습니다:
안녕하세요 세상!
한 개의 Ruby 소스 파일은 파일이 로드될 때 실행되는 코드 블록(BEGIN 블록)과 프로그램이 실행이 완료되면 실행되는 코드 블록(END 블록)을 선언할 수 있습니다.
#!/usr/bin/ruby BEGIN { # BEGIN 코드 블록 puts "BEGIN 코드 블록" } END { # END 코드 블록 puts "END 코드 블록" } # MAIN 코드 블록 puts "MAIN 코드 블록"
한 프로그램은 여러 개의 BEGIN과 END 블록을 포함할 수 있습니다. BEGIN 블록은 등장 순서대로 실행됩니다. END 블록은 반대 순서로 실행됩니다. 실행될 때, 위 프로그램은 다음과 같은 결과를 출력합니다:
BEGIN 코드 블록 MAIN 코드 블록 END 코드 블록