@music1996taro

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ルビー言語 loopメソッド 変数

すみません。Ruby言語で、loopメソッドの最後に、他の繰り返しで使った変数は使えませんとは、どういう事でしょうか?教えて頂けると幸いです。
で、

[1, 2, 3].each{|i|p i}
{height : 170,weight : 60}.each {|element| p element }

みたいな感じのコードで、iやelementなどの変数は、eachメソッドのブロック内でのみ使えると書かれてありましたが、
loopメソッド内では、iなどの変数は使えないで、
例が、

ruby
loop do
puts i # ここでエラーが発生します
break
end

と例を挙げてくれましたが、では、なぜ、この例のloopメソッドには、変数が使えるのでしょうか?
以下のプログラムです。

num = 0
loop {
p num
num += 1
if num > 2
break
end
}

となっているのですが。これは、loopメソッド外で、変数が違うからでしょうか?又、iやelementがeachメソッド内のブロック内でしか使えないというのは、そういう規則だからですよね?教えて頂けると幸いです。
追記
ちなみに、以下のURLの質問です。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13309548593
で、他の繰り返しで使った変数は使えませんという説明は、書籍の説明でloopメソッドの解説が終わった後の最後の一文です。

0 likes

4Answer

Rubyはあんまりよく知らないのですが、どの言語にもある基本的なスコープのことだと思います。この場合、変数numを定義したのがloopの外なので、loopの中でnumを使ってもその外で使えるのではないでしょうか。

0Like

以下のコードは(このコードより前には何も書かれていないとすると)定義されていない変数 i を使っているのでエラーが出ます。

loop do
  puts i # ここでエラーが発生します
  break
end

以下のコードは loop ブロックの前で定義された変数 num を loop ブロックの中で使っています。一般的に言って、 Ruby ではブロックより前で定義された変数はブロックの中でも使えます。

num = 0
loop {
  p num
  num += 1
  if num > 2
    break
  end
}

iやelementがeachメソッド内のブロック内でしか使えないというのは、そういう規則だからですよね

そうです。 [1, 2, 3].each { |i| p i } では |i| の部分で変数 i が定義されていて、それを囲む {} の間でだけ使えるという規則です。

0Like

Comments

  1. @music1996taro

    Questioner

    迅速な回答ありがとうございます。
    では、なぜ、loopメソッドの説明が終わって、最後の一言に「loopメソッドの最後に、他の繰り返しで使った変数は使えません」と書かれているのでしょうか?教えて頂けると幸いです。

  2. loopメソッドの説明が終わって、最後の一言に「loopメソッドの最後に、他の繰り返しで使った変数は使えません」と書かれているのでしょうか?

    なんという本のどこに書いてありますか?引用した文章は正確ですか?「loopメソッドの最後に」という部分は意味が通らないので、そのように書いてあるとは考えづらいです。

もし以下のページの質問者とあなたが同一人物ならの話ですが、マルチポスト(同じ質問を複数のサイトに投稿すること)は控えてください。よそで回答が付いてもこちらの回答者は気づかずに同じ回答をするかもしれず、時間の無駄になります。

0Like

以前にも同じ質問をされていますが解決のコメントも無くクローズもされていませんのでまずはそちらを対応すべきでは?

0Like

Your answer might help someone💌