0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Rubyの変数の定義(グローバル変数)

前回までにローカル変数インスタンス変数クラス変数について書きました。
そして今回はグルーバル変数です。

命名規則

  • 先頭は$
  • 英数字と_で構成されている
$student = 'Taro'
=> "Taro"
$_STUDENT_2 = 'Jiro'
=> "Jiro"
$3sutudent = 'Sabu' #$の隣に数字は定義できない
syntax error, unexpected tIDENTIFIER, expecting end-of-input
#また何も値を入れないとnilになる
$student_5
=> nil

スコープ

どこからでも参照可能

$student = "Taro" 
puts $student 
Taro
=> nil

3.times do |n|
  puts $student
end
Taro
Taro
Taro
=> 3 

def students
  $student
end
students           #どこからでも参照可能
=> "Taro"

class Students
  puts $student  
end
Taro                     #どこからでも参照可能
=> nil

グローバル変数はどこから参照できるので下記のようにもできる。

class Students
  $student = 'Taro'
  def greet  
    puts "Hi,#{$student}"
  end
  def replace=(name)
    $student = name 
  end
end
class MedicalStudents < Students
end

a = Students.new
a.greet
Hi,Taro
=> nil
a.replace = 'Jiro'
a.greet
Hi,Jiro
=> nil

b =  MedicalStudents.new
b.greet
b.replace = 'Hanako'
b.greet
Hi,Hanako
=> nil
a.greet
Hi,Hanako
=> nil
#さらに$studentはというと
$student
=> "Hanako"
#特にwarningが出ることなく呼び出せる。

結論グローバル変数はどこでも呼び出せる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?