0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby  異なるスコープの変数を利用する。

Last updated at Posted at 2018-08-03

定義したメソッド(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変数を受け渡している。(本引数)

以上の流れによって、メソッド外で定義された変数をメソッド内部にで使用出来る。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?