目次
スコープとは?
スコープとは、変数の使える範囲のことです!
- この変数はここ〜ここまで使ってOK
- この変数はここ以外で使っちゃダメー
この様な感じです!
eachメソッドのスコープとは?
eachメソッドにもスコープは存在します!
eachメソッド?という人は下記の記事を先にみてね!
eachメソッド内で作った変数は、外から使えない
numbers = [1,2,3,4,5]
numbers.each do |n|
name = "太郎"
puts "私の名前は#{name}今取り出される数字は#{n}です"
end
結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です
数字1,2,3,4,5という数字が配列になっており、変数unmbersに格納されています
このnumbersに対して、eachメソッドを使い一つ一つとりだしています!
eachメソッドの中には、変数nameが定義されており、次の行で変数を式展開で入れ込み文字列を作っています。
ここで大切なことはnameという変数はeachメソッドの中で作られているということです!
それでは、nameをeachメソッドの外から呼び出して見ましょう!
numbers = [1,2,3,4,5]
numbers.each do |n|
name = "太郎"
puts "私の名前は#{name}今取り出される数字は#{n}です"
end
puts name →eachメソッド内のnameを呼び出したい
結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です
=>undefined local variable or method `name' for....エラー
nameなんて定義されていないよというエラーが出てしまいました!!
eachメソッド内で作られた変数は、外から呼び出す事ができない
これがeachメソッドのスコープになります
eachメソッド外で作られた変数は、eachメソッド内で使える
numbers = [1,2,3,4,5]
name = "太郎"
numbers.each do |n|
puts "私の名前は#{name}今取り出される数字は#{n}です"
end
puts name
結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です
=>太郎
このコードでは、nameという変数はeachメソッドの外で定義されています
puts "私の名前は#{name}今取り出される数字は#{n}です" の結果は
=>「私の名前は太郎今取り出される数字は1です」 ですね!
では、私の名前は太郎はどこのnameを参照しているのでしょうか?
numbers = [1,2,3,4,5]
name = "太郎" ←ここを参照している
numbers.each do |n|
puts "私の名前は#{name}今取り出される数字は#{n}です"
end
この様に、eachメソッドの外にある変数はeachメソッドの中で使う事ができます!
外で定義した変数はeachメソッド内で使える…ややこしいですね…
まとめ
- スコープとは、変数の使える範囲のこと
- eachメソッド内で定義した変数はeachメソッドの外から使うことはできない
- eachメソッドの外で定義した変数は、eachメソッド内で使う事ができる