ruby 變數定義詳解

來源:互聯網
上載者:User

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__
當前源檔案中的行號

偽變數的值不可改變,若對偽變數賦值將引發語法錯誤

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.