2013-09-16 100 views
0

有人可以指點我一個很好的入門知識,只是解釋Ruby/Rails中的不同語法特徵?例如,我看到一些例子如何做myMethod(x: "z")和其他人做myMethod(:x => "x")紅寶石/ Rails哈希火箭語法

對於我來說,語法一般來說似乎很奇怪,只是尋找一個快速瀏覽一下作爲備忘單的參考。

+1

http://stackoverflow.com/questions/10004158/is-hash-rocket-deprecated?lq=1 && http://stackoverflow.com/questions/8675206/is-there-any-difference-between-the-key-value-and-key-value-hash-no?lq=1&& http://stackoverflow.com/questions/2134702/ruby​​-1-9-hash-with-a-dash-in-a-key?rq = 1和許多關於同一主題的其他文章:Google雜誌中的「哈希火箭語法軌道」 – MrYoshiji

+3

只是關於你的具體情況,如果我記得第一種做myMethod的方法(x:「z」)被添加到ruby 1.9中,而在此之前唯一的方法是使用「hashrocket」並執行myMethod(:x =>「x」 ) –

+0

這裏是一個很好的通用紅寶石表:http://overapi.com/ruby/和@AlthafHameez是正確的關於你的具體問題 - 'x:z'語法只是更新 – dax

回答

7

他們是一樣的,這只是一個偏好問題。

我還問自己爲什麼我們要添加這個新的語法,如果我們已經有一個?那麼,使用Ruby進行編程意味着我們很懶,並且想輸入較少可能的字符。所以這個新的語法允許我們 - 懶惰的程序員 - 寫同樣的東西,減去1個字符!


但請記住一些東西,像鑰匙的實例的類型(紅寶石1.9.3):

> {a: 12}.class 
=> Hash 
> {:a => 12}.class 
=> Hash 
> {'a' => 12}.keys.first.class 
=> String 
> {a: 12}.keys.first.class 
=> Symbol 

此外,一些聲明與新語法非法的:

> { '1-2' => "something" } 
=> {"1-2"=>"something"} 
> { 1-2: "something" } 
SyntaxError: (irb):38: syntax error, unexpected ':', expecting tASSOC 
{ 1-2: "something" } 
    ^
(irb):38: syntax error, unexpected '}', expecting $end 

欲瞭解更多信息:Is there any difference between the `:key => "value"` and `key: "value"` hash notations?

+0

使用Rails 3.2.13,'MyModel.new(first_name:「Max」)'在rails視圖(erb):'語法錯誤,意外的':','期待')中似乎是非法的。還是我困惑? –

+0

你使用的是Ruby 1.9.x還是>?這個語法是在Ruby 1.8之後引入的 – MrYoshiji

+0

Ruby v1.8.7 - 我覺得我錯過了Ruby/Rails的基礎。對於那個很抱歉。我是一個終身的Java/C#開發人員,這對我來說是陌生/奇怪的。 :) –