ruby基本語法補缺

2021-06-09 22:23:54 字數 3543 閱讀 4342

a = %w( ant bee cat dog elk )    # create an array

a.each   # iterate over the contents

5.times 

3.upto(6) 

('a'..'e').each 

::雙冒號

域作用符,將模組(類)與它的常量隔開

類重複定義,只是增加方法

在 ruby 中 symbol 表示「名字」,比如字串的名字,識別符號的名字,建立乙個 symbol 物件的方法是在名字或者字串前面加上冒號

:在 ruby 中每乙個物件都有唯一的物件識別符號(object identifier

),可以通過object_id 方法來得到乙個物件的識別符號。例子如下:

irb(main):

001:

0> puts :foo.object_id

2327458

3irb(main):

002:

0> puts :foo.object_id

4327458

5irb(main):

003:

0> puts :

"foo

".object_id

6327458

7irb(main):

004:

0> puts 

"foo

".object_id

824303850

9irb(main):

005:

0> puts 

"foo

".object_id

1024300010

11irb(main):

006:

0> puts 

"foo

".object_id

1224296170

前三行語句中的 :foo (或者 :"foo")都是同乙個 symbol 物件,其 object id 為327458,而後三行中的字串」foo」都是不同的物件,其 object id 依次為24303850、24300010、24296170。

可見,每個 string 物件都是不同的,即便他們包含了相同的字串內容;而對於 symbol 物件,乙個名字(字串內容)唯一確定乙個 symbol 物件

(symbol 物件的字串中不能含有』\0』字元)。

除了可以採用一般的字串,還可以使用操作符(例如+, -, *, /),變數,常量,方法甚至類的名字來建立 symbol 物件,例如:+就是乙個合法的 symbol 。實際上,在 ruby 內部操作符、變數等名字本身就是作為 symbol 處理的,例如當你定義乙個例項變數時, ruby 會自動建立乙個 symbol 物件,例如 @test 對應為 :@test 。

1例項變數的 symbol23

class

test 

4attr_accessor :test

5end

symbol 和 string

symbol 物件和 string 物件是完全不同的東西,物件識別符號很明確的說明了這一點。

symbol 轉化為 string

使用 to_s 或 id2name 方法將 symbol 轉化為乙個 string 物件:

?

1

2

3

4

5

6

irb(main):001:0>:test.id2name

=>"test"

irb(main):002:0>:test.to_s

=>"test"

irb(main):003:0> :"i am a boy".to_s

=>"i am a boy"

注意,每個 string 物件都是唯一的,因此對乙個 symbol 呼叫多次將產生多個 string 物件。

string 轉化為 symbol

除了在字串前面加冒號,還可以使用 to_sym 或 intern 方法將 string 轉化為 symbol ,如果該 symbol 已經存在,則直接返回。

irb(main):

001:

0>

var1 ="

test

".to_sym

2=>

:test

3irb(main):

002:

0>

var2 ="

test

".intern

4=>

:test

5irb(main):

003:

0>

var1 

==var2

6=>

true

7irb(main):

004:

0>

使用 symbol

那麼 symbol 對我們有什麼用呢?當然也是記憶體。使用 string 的開銷太大了,因為每乙個string 都是乙個物件。想想前邊的例子,乙個字串每出現一次 ruby 就會建立乙個 string 物件。

通常來講,當你面臨 string 還是 symbol 的選擇時,可以參考以下標準:

那麼什麼時候我們會用到名字呢?很多時候都會,比如列舉值、關鍵字(雜湊表關鍵字、方法的引數)等等

作為雜湊表的 key

雜湊表是 symbol 應用最為廣泛的地方。在ruby中,雜湊和陣列類似,乙個雜湊表是一系列 key/value 對的集合,只不過它的 key 取值範圍更廣泛,可以是任何物件,比如正規表示式。

但通常我們都會取有意義的 key ,比如 string、symbol 。

下面這個雜湊表表示按城市分類的一些機器的集合:

hosts

如果要引用 beijing 的機器,使用 hosts['beijing'] 。但如果我們程式中要頻繁引用雜湊表中 value ,這樣就不大好了,因為 ruby 對每一次字串引用都會生成乙個 string 物件,

累積下來這個開銷是相當大的,我們可以

使用 symbol 作為 key:

?

1

hosts =

通常我們定義的函式的引數的個數和順序是寫死的,呼叫函式的時候要確保引數的個數、順序匹配,有時候這樣很不方便,使用雜湊引數可以解決這個問題。

Ruby基本語法

一 ruby中一切都是物件 比如可以用.class屬性來檢視乙個物件的型別,看下1.class,會發現常數1的型別是fixnum,1是fixnum的乙個例項。二 ruby語法 ruby中的類以class開始 以end結束,類名首字母的約定是大寫 ruby中的方法以def開始 以end結束,方法名首字...

Ruby基本語法

一 ruby中一切都是物件 比如可以用.class屬性來檢視乙個物件的型別,看下1.class,會發現常數1的型別是fixnum,1是fixnum的乙個例項。二 ruby語法 ruby中的類以class開始 以end結束,類名首字母的約定是大寫 ruby中的方法以def開始 以end結束,方法名首字...

Ruby語法了解

三 流程控制 1 條件控制 if 條件表示式 operation1 elsif operation2 else operation3 end unless 條件表示式 operation2 else operation1 end 與if流程相反 2 分支控制 case 表示式 when 值1,值2 ...