[Ruby] 變數(variable)與常數(Constant)
變數種類
種類 | 範例 | 預設值 | 說明 |
---|---|---|---|
區域變數 (local Variable) | name | 沒有 | 被定義在 method 裡面的變數,它們沒辦法在該 method 外被使用。 |
實例變數 (instance Variable) | @name | nil | 可以視為 class 的屬性(attribute),並會成為物件中的屬性(property)。它可以在該 class 中被存取,因此可以被 class 中的其他 method 使用。它也可以在特定的 object 中被使用,每一個物件的屬性會各別賦值,不會和其他的物件共享,它會隨著不同的物件而有不同的值。 |
類別變數(class Variable) | @@name | 沒有 | 在同一個 class 所建立的實例物件中都可以存用,但沒辦法在不同的 class 中被取用。 |
全域變數(global Variable) | $name | nil | 可以在不同的 class 中被取用。 |
各種 $ 開頭的變數 @ Gist
區域變數和實例變數(local variable & instance variable)
def create_lv
local_var = "區域變數無法在方法外被提取"
@instance_var = "實例便是可以被任何特並的實例或物件提取"
end
create_lv
#puts local_var # error:undefined local variable
puts @instance_var # get @instance_var in create_lv
類別變數(class variable)
class Person
# 在這裡定義類別變數(class variable)
@@people_count = 0
def initialize(name)
@name = name
@@people_count += 1
end
def self.number_of_instances
@@people_count
end
end
matz = Person.new("Yukihiro")
dhh = Person.new("David")
puts "Number of Person instances: #{Person.number_of_instances}"
全域變數(global variable)
定義的方式可以透過在所有的方法和類別外定義,或者如果想要在方法或類別內部定義全域變數時,使用 $
。
在 MyClass 中定義的 local variable 並沒有辦法在 class 外被提取,但我們可以在 local variable 前面加上 $
讓它變成全域變數。
class MyClass
$my_variable = "Hello!"
end
puts $my_variable
常數(Constant)
常數需要全部都是英語大寫,中間以底線分隔,例如,THIS_IS_CONSTANCT
。
事實上,所有的類別、模組的名字都必需是常數。
要特別注意的是,Ruby 中常數的內容是可以修改而且不會發生錯誤(只會有警告,程式可以繼續運作)。