Ruby變數名的首位字元來確定它是局部變數、執行個體變數、類變數、全域變數還是常數。通常情況下,變數名的第二位字元以後是數字、字母或底線,但有的內部變數名比較特殊
s = 'Hello World!'
x = 10
# p004stringusage.rb
# Defining a constant
PI = 3.1416
puts PI
# Defining a local variable
myString = 'I love my city, Pune'
puts myString
=begin
Conversions
.to_i, .to_f, .to_s
=end
var1 = 5;
var2 = '2'
puts var1 + var2.to_i
# << appending to a string
a = 'hello '
a<<'world.
I love this world...'
puts a
=begin
<< marks the start of the string literal and
is followed by a delimiter of your choice.
The string literal then starts from the next
new line and finishes when the delimiter is
repeated again on a line on its own.
=end
a = <<END_STR
This is the string
And a second line
END_STR
puts a
變數的命名有一定規則:以小寫字母或底線開頭,變數中只能包含字母,數字和底線。關鍵字不能作為變數名使用。
當ruby解譯器讀到一個單詞的時候,他會把他解釋成變數名,方法名或者保留關鍵字中的一種。
如果單詞的後面跟一個“=”,說明是一個變數;如果是一個關鍵字,那就只能作為關鍵字使用;其他情況視為方法名。
在下面的例子中:
x = "100".to_i
“.”的意思是方法to_i被字串“100”調用。
字串“100”是方法的調用者。
“.”前面的對象和後面的方法是調用和被調用的關係。
看一下關於ruby變數分類總結
局部變數
例:
foobar
若標識符首位是小寫字母或“_”,則該標識符就是局部變數或方法調用。在局部變數的範圍(類、模組、方法的定義部分)內,若對一個首位是小寫字母的標識符進行首次賦值的話,也就意味著聲明了一個屬於該範圍的局部變數。若引用尚未被聲明的標識符的話,就會被解釋成一個無參數的方法調用。
局部變數的範圍起始於聲明處,結束於該聲明所在的塊、方法定義、類/模組定義的結尾。隨著塊的消亡,局部變數也將壽終正寢(頂層局部變數則一直持續到程式終結),但也有例外。若塊已經變成過程對象的話,則局部變數將一直持續到該過程對象終結為止。若多個過程對象引用同一個範圍的話,局部變數將被這些對象所共用。
# (A)的部分位於範圍之外
2.times {
p defined?(v) # (A)
v = 1 # 從(開始聲明)起
p v # 到(塊的終結)是 v 的範圍
}
# => nil
1
nil <- 請注意這裡是 nil
1
即使聲明部分未被執行仍將有效。
v = 1 if false # 雖未賦值,但聲明有效
p defined?(v) # => "local-variable"
p v # => nil
若使用了 -K 選項的話就可以使用日語標識符,日語標識符被當作局部變數處理。實際上,我們並不推薦您這樣做。
執行個體變數
例:
@foobar
以@開始的變數是執行個體變數,它屬於特定的對象。可以在類或子類的方法中引用執行個體變數。若引用尚未被初始化的執行個體變數的話,其值為nil。
類變數
例:
class Foo
@@foo = 1
def bar
puts @@foo
end
end
以@@開始的變數是類變數。在類的定義中定義類變數,可以在類的特殊方法、執行個體方法等處對類變數進行引用/賦值。
類變數與常數的區別如下。
可以重複賦值(常數則會發出警告)
不能在類的外部直接引用(在繼承類中則可以引用/賦值)
類變數與類的執行個體變數的區別如下。
可在子類中引用/賦值
可在執行個體方法中引用/賦值
可以把類變數看作一種被類、子類以及它們的執行個體所共用的全域變數。
class Foo
@@foo = 1
end
class Bar < Foo
p @@foo += 1 # => 2
end
class Baz < Bar
p @@foo += 1 # => 3
end
模組中定義的類變數(模組變數)被所有包含該模組的類所共用。
module Foo
@@foo = 1
end
class Bar
include Foo
p @@foo += 1 # => 2
end
class Baz
include Foo
p @@foo += 1 # => 3
end
全域變數
例:
$foobar
$/
以$開始的變數是全域變數,可以在程式的任何地方加以引用(因此需要特別留意)。全域變數無需變數聲明。引用尚未初始化的全域變數時,其值為 nil。
偽變數
除普通的變數之外,還有一種叫做偽變數的特殊變數。
self
當前方法的執行主體
nil
NilClass類的唯一執行個體
true
TrueClass類的唯一執行個體
false
FalseClass類的唯一執行個體。nil 和 false 表示“偽”。
__FILE__
當前源檔案名稱
__LINE__
當前源檔案中的行號
偽變數的值不可改變,若對偽變數賦值將引發語法錯誤