【问题标题】:Ruby Syntax ":attr =>" vs. "attr:"? [closed]Ruby 语法 ":attr =>" 与 "attr:"? [关闭]
【发布时间】:2012-11-17 12:54:06
【问题描述】:

此代码是否等效

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

??

【问题讨论】:

标签: ruby ruby-1.9


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    是的。只要您不使用 Ruby 1.8,就可以使用 {a: 'b'} 语法。它和{:a =&gt; '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>
    

    【讨论】:

    • 不,它做的事情并不完全相同。 JavaScript 表示法仅限于符号键的子集,而 hashrocket 可以使用任何有效键。更多细节在这里:stackoverflow.com/a/8675314/479863
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2012-12-07
      • 1970-01-01
      • 2017-09-01
      • 2011-10-18
      • 2012-01-08
      相关资源
      最近更新 更多