[解決済み] Rubyがブロックの中でパイプ文字を使うことについて、誰か説明してください。
質問
Rubyのブロック内でのパイプ文字の使用について、どなたか説明してください。反復しながらデータを代入する変数名が含まれているのは理解できるのですが。しかし、これは何と呼ばれているのでしょうか?パイプの中に複数の変数があってもいいのでしょうか?他に何か知っておくべきことはありますか?それに関するより多くの情報への何か良いリンクは?
例えば
25.times { | i | puts i }
解決方法は?
中括弧は、ブロックと呼ばれる無名関数を定義します。パイプの間にあるトークンはこのブロックの引数です。必要な引数の数は、ブロックの使われ方によって異なります。ブロックが評価されるたびに、ブロックを必要とするメソッドは、それを呼び出すオブジェクトに基づいた値を渡します。
ブロックを受け付けたメソッドの先には格納されないだけで、メソッドの定義と同じです。
例えば
def my_print(i)
puts i
end
を実行すると、これと同じことが行われます。
{|i| puts i}
唯一の違いは、ブロックがその場で定義され、保存されていないことです。
例2: 次の文は等価です。
25.times &method(:my_print)
25.times {|i| puts i}
無名ブロックを使うのは、ブロックとして渡される関数の大半は、通常、あなたの状況に特化したもので、再利用のために定義する価値はないからです。
では、あるメソッドがブロックを受け入れるとどうなるのでしょうか。それはメソッドによります。ブロックを受け入れるメソッドは、呼び出し元のオブジェクトから、きちんと定義された方法で値を渡してブロックを呼び出します。何が返されるかは、ブロックを必要とするメソッドに依存します。
例えば で
25.times {|i| puts i}
.timesは、0から呼び出し元の値までの各値に対してブロックを1回呼び出し、その値を一時変数iとしてブロックに渡します。この場合、25です。
2つの引数を持つブロックを受け入れるメソッドを見てみましょう。
{:key1 => "value1", :key2 => "value2"}.each {|key,value|
puts "This key is: #{key}. Its value is #{value}"
}
この場合、各ブロックはキーと値のペアごとに、第1引数にキー、第2引数に値を渡して呼び出されます。
関連
-
[解決済み】StringからIntegerへの暗黙の変換がない(TypeError)?
-
[解決済み】そのようなファイルやディレクトリはありません @ rb_sysopen ruby
-
[解決済み] Ruby on railsで改行せずにコンソールに "puts "を使用するにはどうすればよいですか?
-
[解決済み] Rubyのcontinueに相当します。
-
[解決済み] Homebrew Portable Ruby のインストールに失敗しました (システムのバージョンが古すぎる場合もあります)
-
[解決済み] 文字列の文字をアルファベット順に並べるには?
-
[解決済み] Rubyのダブルコロン `::` とは何ですか?
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
-
[解決済み] Rubyのattr_accessor, attr_reader, attr_writerを使う理由は?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyで新しい文字列を作成せずに文字列をトリミングする標準的な方法は何ですか?
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み】Rubyで "gets "と "gets.chomp "を使用する方法
-
[解決済み] Rubyの除算はなぜ10進数ではなく整数を返すのですか?
-
[解決済み] git, Heroku: pre-receive フックの減少
-
[解決済み] Rubyのダブルコロン `::` とは何ですか?
-
[解決済み] Rubyで配列を平坦化するにはどうしたらいいですか?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] Rubyの予期しないキーワードの終了、および予期しない入力の終了
-
[解決済み] Rubyでガウス(正規分布)乱数を生成するコード