English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
あなたは既に Ruby がどのようにメソッドを定義し、どうやってメソッドを呼び出すかを知っています。同様に、Ruby にはブロックの概念があります。
block_name{ statement1 statement2 .......... }
ここでは、シンプルな yield ステートメントを使用してブロックを呼び出します。パラメータ付きの 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 ステートメントの後ろにパラメータが続きます。複数のパラメータを渡すこともできます。ブロック内で、2つの縦線の間に変数を置いてパラメータを受け取ることができます。したがって、上記のコードでは、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 ブロックを呼び出すステートメント。
しかし、メソッドの最後のパラメータの前に & がある場合、そのメソッドにブロックを渡すことができます。ブロックは最後のパラメータとして割り当てられます。 * 和 & が同時にパラメータリストに現れる場合、& を後ろに置くこと。
#!/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