質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

343閲覧

Rubyのeach文の中の変数について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/01/04 00:24

Rubyについて質問させてください。

languages = ["日本語", "英語", "スペイン語"]

languages.each do |language|
puts "#{language}を話せます"
end

を実行した際に、

日本語を話せます
英語を話せます
スペイン語を話せます

と出力されるのは分かるのですが、なぜ |language| でそうなるのかが分かりません。
languages 変数は定義しているが language は定義していなません。
それなのに、なぜ language で動作して languages ではエラーになるのでしょうか?

基本的すぎる質問かと思いますが、どうぞ回答よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

eachの機能です。
これが分からないのであれば、「eachって、何ですか?」という質問になると思うのですが。

Arrayに対するeachは、その要素を先頭から順番に一つずつ取り出し、ブロック引数にしてブロックを実行します。doのあとの|で囲んだ変数が、ブロックの仮引数です。
つまり、下記と同じです。

Ruby

1language = languages[0] 2puts "#{language}を話せます" 3language = languages[1] 4puts "#{language}を話せます" 5language = languages[2] 6puts "#{language}を話せます"

投稿2019/01/04 00:41

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/04 01:10

回答有り難うございます。 すると、 languages = ["日本語", "英語", "スペイン語"] languages.each do |language| と書いてある時点で language とは何か、が決まるということでしょうか。
otn

2019/01/04 01:20

そうですね。each と do |language| ~ end の時点で決まります。
退会済みユーザー

退会済みユーザー

2019/01/04 02:20

ありがとうございます!
guest

0

|language| は、each の block 変数です。
each で行う処理(ブロック)の中で language を変数として使うことを宣言しています。
ここでは、ブロック変数に配列の各要素が1つずつ割り当てられて配列の要素数の回数実行されます。

参考情報

  • 配列のeachメソッド

https://www.sejuku.net/blog/11406#each

...
eachメソッドは配列の要素数分、繰り返し実行されます。
その際、eachメソッドのブロックのブロック変数に、配列の1つの要素が与えられます。
...

  • Rubyリファレンス each (Array)

https://ref.xaio.jp/ruby/classes/array/each

...
eachメソッドは、配列の要素の数だけブロックを繰り返し実行します。繰り返しごとにブロック引数には各要素が順に入ります。戻り値はレシーバ自身です
...

投稿2019/01/04 16:53

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

languages 変数は定義しているが language は定義していなません。

|language|自体が、この変数の定義です。

投稿2019/01/04 00:37

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/04 01:15

languages = ["日本語", "英語", "スペイン語"] languages.each do |language| と書いた時点で、language は languages の中の引数、ということが決まるのでしょうか。 すると、["日本語", "英語", "スペイン語"]のような複数の配列を代入する場合は、代数は複数形でないと each が使いにくそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問