2013-03-16 162 views
2

我剛開始在rails上學習ruby,我想知道什麼時候應該使用「=>」以及何時應該使用「=」進行賦值。我看到你使用「=>」作爲散列,用於爲遷移中的符號賦值,但我不確定在哪裏繪製線條。=>運算符vs =運算符

謝謝!

+3

無法賦予符號,與數字無法賦值的方式相同。只有變量可以分配給。 – 2013-03-16 08:12:49

+0

感謝這個,請將此標記爲答案 – jamesdlivesinatree 2013-03-16 09:55:42

+0

Ruby使用'=>'作爲散列的「賦值」操作符來自於Perl,它使用相同的運算符,但是'=>'並不意味着「assign」。相反,認爲它意味着「與...相關」。在Perl中,'=>'實際上是''的別名,它最終定義了一個key和value對的數組。所以,在Ruby中,不要把它看作是任務,而是把它想象成關聯。當你知道在其他語言中他們稱之爲散列「關聯數組」時,這非常合適。 – 2013-03-17 07:10:41

回答

7

=>符號僅用於散列。 Ruby有一個功能,可以將散列作爲方法調用的最後一個參數傳遞,而不包括周圍的大括號。這提供了類似於關鍵字參數的東西(儘管在Ruby 2.0之前,Ruby沒有關鍵字參數)。

所以當你看到這一點:

t.integer :foo, :default => 5 

它真正的意思是這樣的:

t.integer(:foo, { :default => 5 }) 

剩下的只是語法糖設計,使其看起來更好。

另一方面,=符號是幾乎所有編程語言都知道並喜歡的賦值運算符。

0

我這個掙扎了一段時間,但現在更喜歡儘可能

t.integer :foo, default: 5 
t.string :bar, default: 'Dave' 
0

=>是不一樣的分配使用新樣式的哈希值,但我可以看到爲什麼它是混亂的。在散列中,您創建一個鍵和一對值。鍵和值可以是任何東西

{'key1' => 'some value', :symbol_key => 'other value'} 

這是分配,你可以清楚地看到,因爲如果你想上面的散列保持可用到您的程序,您必須把它傳遞給方法或不同它分配給一個變量

myhash = {'key1' => 'some value', :symbol_key => 'other value'} 

而且只有現在你可以從你的哈希

puts myhash['key1'] 

所以=>運營商實際上是用來構建哈希(或者字典檢索的東西離子對象),賦值允許您將值存儲在程序中。

Rails(以及因此在遷移中)相當常見的情況是,正在創建散列並將其傳遞給方法調用,而您並未意識到這一點。但管道仍然是一樣的,它仍然只是一個創建的散列。

在Ruby 1.9中,您現在可以使用類似javascript的語法定義哈希值,因此您可能也會開始看到這一點。

myhash = {key1: 'some value', key2: 'other value'}