Ruby语法“:attr =>”与“attr:”?

时间:2012-11-17 12:54:07

标签: ruby ruby-1.9

此代码是否具有等效性

class Product < ActiveRecord::Base
  validates :legacy_code, :format => { :with => /\A[a-zA-Z]+\z/,
    :message => "Only letters allowed" }
end

到此代码:

class Product < ActiveRecord::Base
  validates :legacy_code, format: { with:/\A[a-zA-Z]+\z/,
    message:"Only letters allowed" }
end

...

3 个答案:

答案 0 :(得分:2)

是的,这些代码在ruby 1.9中是等效的 {:key => vales} - 是ruby 1.8中的哈希语法 {key: value} - 是一种新的哈希语法,它是在ruby 1.9中添加的

答案 1 :(得分:1)

是。只要您不使用Ruby 1.8,就可以使用{a: 'b'}语法。它与{:a => 'b'}完全相同,只是更短。

在IRB中运行时,两个示例都显示相同的结果(在Ruby 1.9中)。

$ irb1.9
irb(main):001:0> {:a => 'b'}
=> {:a=>"b"}
irb(main):002:0> {a: 'b'}
=> {:a=>"b"}
irb(main):003:0>

但是在Ruby 1.8中运行时,{a: 'b'}不起作用。

$ irb1.8
irb(main):001:0> {:a => 'b'}
=> {:a=>"b"}
irb(main):002:0> {a: 'b'}
SyntaxError: compile error
(irb):2: odd number list for Hash
{a: 'b'}
   ^
(irb):2: syntax error, unexpected ':', expecting '}'
{a: 'b'}
   ^
(irb):2: syntax error, unexpected '}', expecting $end
        from (irb):2
irb(main):003:0>

答案 2 :(得分:0)

如果您使用的是ruby 1.9,则它是有效的,也是等效的。