定義したメソッド(def ~ end)の外で定義された変数はそのままでは使えない。
---------------------------------------------
def sample1
rei1 = "HelloWorld!"
puts "#{rei1}"
end
sample1 => HelloWorld!
--------------------------------------------
メソッド内部での変数使用であり、問題なくHelloWorldと出力される。
一方メソッド外で変数を呼び出した場合は下記の通り変数が定義されていないエラーが返される。
----------------------------------------------
def sample1
rei1 = "Hello World"
end
def sample_output
puts "#{rei1}"
end
sample_output =>NameError
----------------------------------------------
rei1に代入された値はメソッド内部のみで使用可能となる為、sample1メソッド外であるsample_outputメソッドにおいて、rei1変数が呼び出せなかったことが原因となる。
ここからはメソッドの外で定義された変数(メソッドのスコープ外)をメソッドで使用するための、引数・仮引数を紹介する。
---------------------------------
def sample1(rei1)
puts "#{rei1}"
end
rei1 = "代入しました。"
sample1(rei1) =>代入しました。
---------------------------------
まずはdef~end間でsample1メソッドの定義を行っている。
次にrei1に"代入しました"の文字を代入した後、sample1メソッドを呼び出して表示している。
ここでsample1メソッドを呼び出す際にそのメソッドに送る変数を()で記載しており、これが本引数と言われている。
一方でメソッドに渡されてからメソッド内部で使用される変数はdef sample1(仮引数)となる。
そのメソッド内部では仮引数で記載された変数名で処理が行われる事となる。
----------------------------------
def sample2(output)
puts "#{output}"
end
rei1 = "Hello World"
sample2(rei1)
----------------------------------
sample2メソッドに(output)という名前の仮引数を定義し、以降このメソッド内部ではoutputという変数名で処理が行われる。
rei1に”HelloWorld”を代入し、sampleメソッドにrei1変数を受け渡している。(本引数)
以上の流れによって、メソッド外で定義された変数をメソッド内部にで使用出来る。