Ruby-blocks

提供:Dev Guides
移動先:案内検索

ルビー-ブロック

Rubyがメソッドを定義する方法を見てきました。ここでは、多数のステートメントを配置し、そのメソッドを呼び出すことができます。 同様に、Rubyにはブロックという概念があります。

  • ブロックはコードのチャンクで構成されます。
  • ブロックに名前を割り当てます。
  • ブロック内のコードは常に中括弧(\ {})で囲まれています。
  • ブロックは、ブロックの名前と同じ名前の関数から常に呼び出されます。 これは、_test_という名前のブロックがある場合、_test_関数を使用してこのブロックを呼び出すことを意味します。
  • _yield_ステートメントを使用してブロックを呼び出します。

構文

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

ここでは、簡単な_yield_ステートメントを使用してブロックを呼び出す方法を学習します。 また、ブロックを呼び出すためのパラメーターで_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_ステートメントが記述され、その後にパラメーターが続きます。 複数のパラメーターを渡すこともできます。 ブロックでは、2つの垂直線(||)の間に変数を配置して、パラメーターを受け入れます。 したがって、上記のコードでは、yield 5ステートメントは値5をパラメーターとしてテストブロックに渡します。

さて、次の文を見てください-

test {|i| puts "You are in the block #{i}"}

ここでは、変数_i_で値5を受け取ります。 さて、次の_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