English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby ブロック

あなたは既に Ruby がどのようにメソッドを定義し、どうやってメソッドを呼び出すかを知っています。同様に、Ruby にはブロックの概念があります。

  • ブロックは多くのコードで構成されています。
  • ブロックには名前を付けなければなりません。
  • ブロック内のコードは常に大括号 {} 内に含まれます。
  • ブロックは常に同じ名前の関数から呼び出されます。これは、ブロックの名前が testを使用する必要があります。 test を呼び出します。
  • このブロックを呼び出すために以下を使用できます。 yield ステートメントを使用してブロックを呼び出します。

文法

block_name{
   statement1
   statement2
   ..........
}

ここでは、シンプルな yield ステートメントを使用してブロックを呼び出します。パラメータ付きの 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!"}

上記の例の実行結果は以下の通りです:

こんにちは、世界!

BEGIN と END ブロック

Ruby のソースファイルは、ファイルが読み込まれた時に実行されるコードブロック(BEGIN ブロック)およびプログラムの実行が完了した後に実行されるコードブロック(END ブロック)を宣言することができます。

オンラインサンプル

#!/usr/bin/ruby
BEGIN { 
  # コードブロック BEGIN
  puts "コードブロック BEGIN"
} 
END { 
  # コードブロック END
  puts "コードブロック END"
}
  # コードブロック MAIN
puts "コードブロック MAIN"

プログラムには、複数の BEGIN と END ブロックを含むことができます。BEGIN ブロックはその出現順に実行されます。END ブロックはその逆順に実行されます。実行すると、以下のような結果がプログラムから出力されます:

コードブロック BEGIN
コードブロック MAIN
コードブロック END