變數種類
虛擬變數(Pseudo Variable)
除了上述這幾款變數外,Ruby 還有一種稱之虛擬變數(Pseudo Variable)的東西,這是在 Ruby 內部定義的,例如 nil、self、true、false,虛擬變數通常有特別的用途或意義,內容不能被改變。
false = "abc" # => 發生 Can't change the value of self 錯誤
nil = "hi,ruby" # => 發生 Can't assign to true 錯誤
變數預設值
沒有初始化的全域變數以及實體變數的預設值是 nil,但一般的區域變數是沒有預設值的:
p @age # => nil
p $age # => nil
p age # => 發生 undefined local variable or method 錯誤
有效範圍
這些變數的有效範圍(scope)都有些差別。以全域變數來說,都可以用,但沒事不要亂用全域變數,可能會造成自己或其它人的困擾。區域變數的作用範圍舉個例子如下:
def say_hello
name = "宅男"
puts "hi, 我是#{name}"
end
say_hello # => 印出 "hi, 我是宅男"
puts name # => 發生變數找不到的錯誤
可以看到在 say_hello 這個方法裡,定義了name,當我們呼叫say_hello這個方法時,name有被讀取到,然後印出
"hi, 我是宅男",但當我們在外部想要印出 name 的時候 會出錯 因為name是定義在方法裡 外部沒辦法讀取
變數
在 Ruby 使用變數,不需要特別宣告或是指定型態,直接定義就可以了。在變數命名規則上,常見會使用英文字母、數字或底線的組合。或是非英文字母也可以,例如:
my_name = "kai"
age = 16
姓名 = "宅男"
常數
常數用起來其實跟變數差不多,也不需要特別宣告它是常數,但在 Ruby 對常數有特別的命名規定,就是「常數必須要是大寫英文字母開頭」,例如:
ExchangeRate = 0.16
Name = "kai"
所有的類別、模組的命名都必須是常數,要特別注意的是,其他程式語言裡,常數通常是不可被修改的,但在 Ruby 的常數的內容是可以修改而且不會發生錯誤(但會出現警告 程式仍然可執行):
MyName = "kai" # => kai