電子書籍の厳選無料作品が豊富!

以下のURLの質問
https://oshiete.goo.ne.jp/qa/14060608.html
で、
「本の題名は、
「3ステップでしっかり学ぶRuby入門」
で、著者は、「竹馬力」です。
で、2018年1月26日に、紙版と電子版が出ています。
以下のURLの通りです。

https://gihyo.jp/book/2018/978-4-7741-9502-5

よろしくお願いします。教えて頂けると嬉しいです。
わざわざお骨折りありがとうございます。
問題のページは、「127ページ」の「loopメソッド」の、すぐ下です。

よろしくお願いします。教えて頂けると嬉しいです。」
の所の続きからです。
引き続きよろしくお願いします。

質問者からの補足コメント

  • No.1です。
    迅速な回答ありがとうございます。
    わざわざお骨折り大変恐縮で、感謝します。
    それで、追加質問は、お礼のコメントで、させて頂きます。よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2025/03/23 15:55
  • 追加コメントです。
    画像を添付します。
    意味不明な点があれば、不明な点を教えて頂けると幸いです。(たぶんこの画像だけでは、分からないとは、思いますが。)

    「ruby loopメソッド 変数(再喝)」の補足画像2
      補足日時:2025/03/23 16:09
  • No.2です。
    迅速な回答ありがとうございます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2025/03/23 18:27
  • うーん・・・

    No.3です。
    迅速な回答ありがとうございます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2025/03/23 19:54
  • No.4です。
    迅速な回答ありがとうございます。
    また、rubyプログラムの実行をやってみます。
    今は、少し手が離せないので、今日〜明日中には、やっておきます。
    すみません。

    No.4の回答に寄せられた補足コメントです。 補足日時:2025/03/23 20:34
  • No.5です。
    迅速な回答ありがとうございます。

    No.5の回答に寄せられた補足コメントです。 補足日時:2025/03/23 22:20
  • もしかすると、「他の繰り返しで使った変数は使えません」というのは、この場合だと、1回目の繰り返し(つまり、loop do 〜 endの事)で、loop
    do end内で変数iが何かを示していても、(この場合だと、i=99の事)2回目の繰り返し(同じく loop do 〜 endの事)で、loop do 〜 end内に同じiが出て来たとしても、1回目のloop do 〜 end内のi=99は、使えないという意味だったのかもしれませんが、tatsumaru77様は、これについて、そう思いませんか?

    教えて頂けると嬉しいです。よろしくお願いします。

    No.6の回答に寄せられた補足コメントです。 補足日時:2025/03/24 01:53
  • 逆に、別の解釈は、存在するのでしょうか?
    少なくとも、私には、思い付きませんでした。
    tatsumaru77様は、どう思いますか?

    No.7の回答に寄せられた補足コメントです。 補足日時:2025/03/24 08:35
  • No.7の補足コメントの追記です。
    「他の繰り返しで使った変数は使えません」についての別の解釈の事です。
    大変失礼しました。改めてよろしくお願いします。

      補足日時:2025/03/24 08:39
  • うーん・・・

    すみません。以下のrubyのプログラムで、
    ~ここから~
    i=10000・・・①
    loop do
    i = 99
    puts i # i の値99が表示される
    break
    end

    loop do
    puts i # i が未定義でエラー
    break
    end
    ~ここまで~
    ここで、なぜ、①の「i=10000」は、なぜ出力されないのでしょうか?
    教えて頂けると幸いです。よろしくお願いします。

    No.8の回答に寄せられた補足コメントです。 補足日時:2025/03/24 15:30

A 回答 (15件中1~10件)

どちらも正しいと思います。

少なくとも、前者(あなたの考えた解釈)は、正しいです。

あなたは、カラスが空を飛ぶのをみて、「鳥は空を飛ぶ」といいました。
私は、ダチョウが走るのを見て、「鳥は空を飛べない。鳥は走る。」といいました。

この主張のどちらが正しいかを論じているような気がします。
私はどちらも正しいと思います。

どちらが正しいかにこだわる必要はないと思いますがいかがでしょうか。
あなたは、どちらかが正しくて、どちらかが誤っていると考えているから、
どちらが正しいかにこだわっているのではないでしょうか。
    • good
    • 0
この回答へのお礼

No.15です。
迅速な回答ありがとうございます。
そうですね。もしかすると、書籍の「他の繰り返しで使った変数は使えない」は、前者と後者2通りの意味があるのかもしれませんね。

お礼日時:2025/03/28 09:02

>所で、私の考えた解釈(前者)とtatsumaru77様が、考えて頂いた解釈(後者)と、


>どっちが、正しいのでしょうね?やはり、最後の「使えない」という言葉から考えると、前者でしょうか?

回答:

~~ [ここから] ~~
loop do
i = 99
puts i # i の値99が表示される
break
end

loop do
puts i # i が未定義でエラー
break
end
~~ [ここまで] ~~


上記のスクリプトについては
「他の(繰返し等制御)ブロック内で宣言された変数は使えません」
が成立します。
これが、あなたが解釈なので、あなたが主張していることは正しいです。
    • good
    • 0
この回答へのお礼

No.14です。
迅速な回答ありがとうございます。
No.13で、後者(tatsumaru77様に考えて頂いた別の解釈)という考えもあるが、書籍には、「使える」とは、書いておらず、「使えない」と書いてあることから、やはり、その点を加味すると、前者(私の考えた解釈)の方が正しいとなるのでしょうか?

教えて頂けると嬉しい。よろしくお願いします。

お礼日時:2025/03/27 22:25

>では、逆に同じ点というのは、どういう点でしょうか?



回答:
「他の繰り返しで使った変数は使えません」について解釈の事ですが、


①の行が追加されていた場合です。
~ここから~
i=10000・・・①
loop do
i = 99・・・②
puts i # i の値99が表示される・・・③
break
end

loop do
puts i # i が未定義でエラー
break
end
~ここまで~

この場合、
puts i # i が未定義でエラー
の個所の変数iが、②、③の個所で使われていますが、これは
「他の繰り返しで使った変数は使えません」のうちの、"他の繰り返しで使った変数"
は、同じ意味です。ここが、同じ点になります。違うのは、その変数(i)が使えるということです。
    • good
    • 0
この回答へのお礼

No.13です。
迅速な回答ありがとうございます。
所で、私の考えた解釈(前者)とtatsumaru77様が、考えて頂いた解釈(後者)と、どっちが、正しいのでしょうね?やはり、最後の「使えない」という言葉から考えると、前者でしょうか?
教えて頂けると嬉しいです。よろしくお願いします。

お礼日時:2025/03/27 18:35

>一つ疑問がありますが、「puts i # i が未定義でエラー」の行で、エラーが発生しないのは、


>「i=10000」が、「i=99」に上書きされて、
>それが、そのまま使われているから。という事でしょうか?

回答:はい、その通りです。
そのことを
https://oshiete.goo.ne.jp/qa/14060608.html#googl …
のNo8の回答の
スクリプト名 ex4.rb で説明しています。
    • good
    • 0
この回答へのお礼

No.12です。
迅速な回答ありがとうございます!
では、逆に同じ点というのは、どういう点でしょうか?

教えていただけると幸いです。よろしくお願いします。

お礼日時:2025/03/27 06:35

>疑問②の追加質問


>「他の(繰返し等制御)ブロック内で宣言された変数でも使える」の所について、もう少し分かりやすく教えて頂けると嬉しいです。

回答:
以下のスクリプトについては、
「他の(繰返し等制御)ブロック内で宣言された変数は使えません」

~ここから~
loop do
i = 99
puts i # i の値99が表示される
break
end

loop do
puts i # i が未定義でエラー
break
end
~ここまで~

これは、
puts i # i が未定義でエラー
でエラーが発生するから、iは使えないと言っているわけですね。


それに対して、
~ここから~
i=10000・・・①
loop do
i = 99
puts i # i の値99が表示される
break
end

loop do
puts i # i が未定義でエラー
break
end
~ここまで~

のように①を追加すると、
puts i # i が未定義でエラー
の行でエラーは発生せず、99が表示されます。つまり、iは使えるわけです。
そのことを
「他の(繰返し等制御)ブロック内で宣言された変数でも使える」
と書きました。
    • good
    • 0
この回答へのお礼

No.11です。
迅速な回答ありがとうございます。
一つ疑問がありますが、「puts i # i が未定義でエラー」の行で、エラーが発生しないのは、「i=10000」が、「i=99」に上書きされて、それが、そのまま使われているから。という事でしょうか?

教えて頂けると嬉しいです。よろしくお願いします。

お礼日時:2025/03/26 16:22

>疑問①「この行」とは、どこでしょうか?



回答:
「①の「i=10000」は、なぜ出力されないのでしょうか?」
という質問に対しての回答なので、
i=10000・・・①
の行です。



>loop do
>puts i ♯iが未定義でエラー
>break
>end
>で、putsがあると思うのですが。では、No.8のrubyプログラムに何を付け加えれば、①の「10000」が表示されるのでしょうか?

回答:
loop do
i = 99・・・②
puts i # i の値99が表示される
break
end

でiに99を設定しているので、ここでiの値が99に変わります。
puts i ♯iが未定義でエラー
の行で10000を出力するように変えることは、できません。
もちろん、
puts i ♯iが未定義でエラー
の行の前に
i = 10000
を追加すれば可能ですが、そのようなことを期待されているのではないと思います。

本件については、
https://oshiete.goo.ne.jp/qa/14060608.html
のNo8で解説した内容になります。
「ローカル変数がブロックの前で、宣言された場合は、ブロックの中では、その値をそのまま引き継ぎます。
そして、ブロックを抜けた後でも(ブロックの後でも)、その変数は有効で、使用することができます。」
の個所です。


>疑問②「同じといえば、同じですが、違うといえば違うような気もします。」
>の所ですが、どこが違うのでしょうか?

回答:
「他の(繰返し等制御)ブロック内で宣言された変数は使えません」と同じかというと、
他の(繰返し等制御)ブロック内の前で、宣言されていれば、「他の(繰返し等制御)ブロック内で宣言された変数でも使える」という点が異なります。
    • good
    • 0
この回答へのお礼

No.10です。
迅速な回答ありがとうございます。
それで、疑問が1つあって、
疑問②の追加質問
「他の(繰返し等制御)ブロック内で宣言された変数でも使える」の所について、もう少し分かりやすく教えて頂けると嬉しいです。
よろしくお願いします。

お礼日時:2025/03/26 03:17

>ここで、なぜ、①の「i=10000」は、なぜ出力されないのでしょうか?



この行では、画面出力するための命令がありません。(puts等)
そのため、なにも出力されません。
    • good
    • 0
この回答へのお礼

No.9です。
迅速な回答で懇切丁寧な解説ありがとうございます。
すみません。
疑問点が2つほどあって、
疑問①「この行」とは、どこでしょうか?
loop do
puts i ♯iが未定義でエラー
break
end
で、putsがあると思うのですが。では、No.8のrubyプログラムに何を付け加えれば、①の「10000」が表示されるのでしょうか?
疑問②「同じといえば、同じですが、違うといえば違うような気もします。」
の所ですが、どこが違うのでしょうか?
以上2点について、教えて頂けると幸いです。よろしくお願いします。

お礼日時:2025/03/24 21:39

>逆に、別の解釈は、存在するのでしょうか?


>少なくとも、私には、思い付きませんでした。
>「他の繰り返しで使った変数は使えません」についての別の解釈の事です。

回答:
以下のような場合も、同じ解釈になるのでしょうか。
①の行が追加されていた場合です。
~ここから~
i=10000・・・①
loop do
i = 99
puts i # i の値99が表示される
break
end

loop do
puts i # i が未定義でエラー
break
end
~ここまで~

同じといえば、同じですが、違うといえば違うような気もします。
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.8です。
迅速な回答で、懇切丁寧な説明ありがとうございます。

お礼日時:2025/03/24 15:27

>もしかすると、「他の繰り返しで使った変数は使えません」というのは、この場合だと、1回目の繰り返し(つまり、loop do 〜 endの事)で、loop


do end内で変数iが何かを示していても、(この場合だと、i=99の事)2回目の繰り返し(同じく loop do 〜 endの事)で、loop do 〜 end内に同じiが出て来たとしても、1回目のloop do 〜 end内のi=99は、使えないという意味だったのかもしれませんが、tatsumaru77様は、これについて、そう思いませんか?

回答:はい、この場合は、そのような意味に解釈することは可能かと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.7です。
迅速な回答で懇切丁寧な説明ありがとうございます。

お礼日時:2025/03/24 08:30

>質問①もしかして、ここでいうRubyの「繰り返し」は、do〜endの事とかを指しているのでしょうか?



回答:はい、そうです。正確には、loop do ~ endのことを言っています。
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.6です。
迅速な回答ありがとうございます。

お礼日時:2025/03/24 01:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A