这些语法有什么区别?

时间:2015-05-23 22:50:32

标签: ruby-on-rails ruby-on-rails-4

验证模型属性的这两行之间有什么区别?

validates :last_name, :length => { :maximum => 32 }

validates :last_name, length: { maximum: 32 }

第一个使用:attribute =>,第二个使用attribute:

2 个答案:

答案 0 :(得分:1)

两者之间的区别在于定义键/值对的哈希的语法。这取决于您正在使用的Ruby版本。

Ruby 1.8和1.9 +都支持第一个:

:key => :value

第二个仅在Ruby 1.9+中受支持:

key: :value

如果您使用的是Ruby 1.9,则应该使用后者,因为它似乎是社区中的首选方式。我个人也认为它的代码更清晰。

但是有一点不同。除非你使用的是Ruby 2.2,否则当你的密钥是字符串时,你不能使用后者。这只适用于Ruby 2.2 +:

{ 'key': :value }

要在低于Ruby 2.2的任何东西中使用字符串作为键,你必须使用'hash rocket':

{ :'key' => 'value }

答案 1 :(得分:0)

没有区别,

{ symbol_key: value }

看起来更干净
{ :symbol_key => value }

对于字符串键,你仍然需要使用" rocket"声明一个键的值,如下所示:

{ "string_key" => value }

事实上,如果你打开ruby控制台并输入

{ symbol_key: "value" }

它输出{ :symbol_key => "value" }表明{ symbol_key: "value" }转换为火箭语法,并且它只能看起来更好。