##Rubyのローカル変数のスコープについて
タイトルの通りです。Rubyのローカル変数のスコープについて質問です。
私はローカル変数とはブロック・メソッド内で定義された変数のことで、またメソッド・ブロック内からは外部で定義した変数を参照できない(引数として渡さない限り)と理解しています。
ruby
1x = 1 2 3def calculate 4 puts x 5end 6 7calculate
このようなコードをターミナルから実行するとundefined local variable or method `x' for main:Object (NameError)というエラーが出ました。
これはcalculateメソッド内で変数xが定義されていないというエラーです。
つまりdefの外、rubyのトップレベルで定義したxはメソッド内からは参照できないということですよね。
ruby
1x = 100 2 3while true do 4 if x > 0 5 puts "0より大きい" 6 break 7 else 8 puts "0より小さい" 9 break 10 end 11end 12
次に上記のファイルをターミナルで実行しました。
すると「0より大きい」というターミナルに出力されました。
つまりトップレベルのx = 100はブロック内でも参照可能ということですよね。
ブロック・メソッド内からは外で定義した変数は参照できないならば今回もエラーが出るはず(do~end内でxを定義したわけではないから)と思ったのですがなぜでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/03 13:54
2021/03/03 14:15