-3

此代码是否等效

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

??

4

3 回答 3

2

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

于 2012-11-17T12:57:02.750 回答
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>
于 2012-11-17T13:01:26.623 回答
0

如果您使用的是 ruby​​ 1.9,那么它是有效的并且是等效的。

于 2012-11-17T12:57:27.310 回答