Contents
Ruby – ブロック
RUBYのブロックとは何か?
ブロックとは、簡単にいうと「引数のかたまり」という意味合いになります。ブロックの、do~end までの範囲すべてが引数ということになりますね。
block do | i | x = i * 2 #青がブロックってことですね。 p x end
または、{ } で囲まれた範囲もブロックで、この範囲すべてが引数です。
0 2 4
構文
block_name{
statement1
statement2
..........
}
言葉でまとめると?
ブロックとはコードの塊である
-
ブロックに名前を割り当てることができる(構文のNAMEのとこ)。
-
ブロック内のコードは中括弧({})で囲まれテイル
-
ブロックは、ブロックと同じ名前の関数から常に呼び出されます。これは、名前testのブロックがある場合、このブロックを呼び出すために関数testを使用することを意味します。
-
今回はyieldステートメントを使用してブロックを呼び出します。
yieldステートメント
yield文の例を見てみましょう。
#!/usr/bin/ruby def test puts "あなたはメソッドの中にいます" yield puts "あなたはメソッドの中にまた入りました" yield end test {puts "あなたはブロックの中にいます"}
これにより、次の結果が生成されます。
あなたはメソッドの中にいます あなたはブロックの中にいます あなたはメソッドの中にまた入りました あなたはブロックの中にいます
また、yield文でパラメータを渡すこともできます。
#!/usr/bin/ruby def test yield 5 puts "あなたはメソッドテストの最中です" yield 100 end test {|i| puts "あなたはブロックテストを #{i}しています"}
これにより、次の結果が生成されます。
あなたはブロックテストを5しています あなたはメソッドテストの最中です あなたはブロックテストを100しています
ここでは、yield文の後にパラメータが続きます。複数のパラメーターを渡すこともできます。このブロックでは、パラメータを受け入れるために、2つの垂直線(||)の間に変数を配置します。したがって、上記のコードでは、yield 5ステートメントは値5をパラメーターとしてテストブロックに渡します。
今、次のステートメントを見てください –
test {|i| puts "あなたはブロックテストを #{i}しています"}
ここでは、変数iに値5が入力されます
puts あなたはメソッドテストの最中です
この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!"}
これにより、次の結果が生成されます。
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
次のページ
前のページ