Ruby / Rails哈希火箭语法

时间:2013-09-16 18:52:40

标签: ruby-on-rails ruby syntax hashrocket

有人能指出我刚才解释Ruby / Rails中不同语法特征的好基础吗?例如,我看到的一些例子如何myMethod(x: "z")而其他人做myMethod(:x => "x")

一般来说语法对我来说似乎很奇怪,只是想快速一目了然地将其用作备忘单。

1 个答案:

答案 0 :(得分:7)

它们是相同的,这只是一个偏好问题。

我也问自己为什么我们会添加这个新语法?如果我们已经有了这个语法?那么,用Ruby编程意味着我们很懒,想要输入较少的字符。因此,这种新语法允许我们 - 懒惰的程序员 - 编写相同的东西,减去1个字符!


但请记住一些东西,例如键的类型(Ruby 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?