2013-09-16 72 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#开发人员,这对我来说是陌生/奇怪的。 :) –