局所変数3
def double_this num num_times_2 = num*2 puts num.to_s + 'の2倍は ' +num_times_2.to_s end double_this 44 puts num_times_2.to_s
最終行 "puts num_times_2.to_s"についてerrorが出ますね。
moomin:programmingRuby tomomi$ ruby method.rb 44の2倍は 88 method.rb:7: undefined local variable or method `num_times_2' for main:Object (NameError)
errorでは「num_times2 といった局所変数は定義されていませんよ」と言ってます。つまりnum_times2という局所変数はメソッドの中で定義したはずだが、その変数を使おうとしたところが(最終行のputs〜 のくだり)局所ではなかったということです。つまり、
- 局所とは double_thisの中のみをいう
- メソッドの中の変数は外からアクセスできない (putsで実行するとerrorが出てますね)
ふるまい例 1
あーなるほど。
自分で書いてみてやっと「外からアクセスできない」意味が分かった気がする。まずは分かったことをよしとします。
def exa var var = nil puts '変数のふるまい教えて!' end var = '外から変数にアクセスできませんよ' exa var puts var
moomin:programmingRuby tomomi$ ruby method.rb 変数のふるまい教えて! 外から変数にアクセスできませんよ
このプログラムについて
- 同じ名前の変数が2つありますね
- 1行目の var, 6行目のvar. しかしこの2つは無関係
- exa var とメソッドを呼び出した時は 1つのexa varからもう1つへ文字列が渡される
- 2つの変数はこのメソッド呼び出し通じてのみ言葉を交わすことができる
- 結果、この2つの変数は同じ文字列を指すようになり、exa は自分の局所変数である varに対し nilを示すように代入しています。しかしこれは外側(7行目)にはなんの影響もしません