Rubyのブロック
あなたは既にRubyのメソッドを定義する方法を知っているとどのようにメソッドを呼び出します。 同様に、Rubyはブロックの概念があります。
- ブロックは、多くのコードで構成されています。
- あなたはブロック名を取る必要があります。
- ブロック符号は、常に内部の中括弧{}で囲まれています。
- そこからは、常に同じ名前の関数呼び出しをブロックしました。 これはテストのためのあなたのブロック名ならば、あなたは、この関数のテストブロックを呼び出すために使用することを意味します。
- あなたはブロックを呼び出すためにyield文を使用することができます。
文法
block_name{ statement1 statement2 .......... }
ここでは、ブロックを呼び出すために、単純なyield文を使用する方法を学習します。 また、呼び出されたブロックへのパラメータでyield文を使用する方法を学習します。 例では、yield文の2つのタイプが表示されます。
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つの垂直バーの間で変数を配置することができます。 したがって、上記のコードでは、収量5文は、5試験片の値にパラメータとして渡されます。
さて、次の文を見て:
test {|i| puts "你在块 #{i} 内"}
ここでは、5の値は、変数iを受け取ることになります。 今、私たちは、次のステートメントを守っ置きます:
puts "你在块 #{i} 内"
これは、出力文があります:
你在块 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 代码块 puts "BEGIN 代码块" } END { # END 代码块 puts "END 代码块" } # MAIN 代码块 puts "MAIN 代码块"
プログラムは、複数のBEGINとENDブロックを含めることができます。 BEGINブロックは、それらが表示される順序で実行されます。 ENDブロック彼らは逆の順序で表示されます。 実行すると、上記のプログラムは、以下の結果が得られます。
BEGIN 代码块 MAIN 代码块 END 代码块