在Ruby中,在Hash中使用标识符后的冒号是什么意思?

Rom*_*man 19 ruby syntax hash

我正在学习Factory Girl,我看到了这段代码:

factory :post do
  association :author, factory: :user, last_name: "Writely"
end
Run Code Online (Sandbox Code Playgroud)

为什么factorylast_name在它们的末尾有一个冒号?

OzB*_*dit 33

在此上下文中的冒号表示字面哈希.

factoryHash关键,:user是价值.

替代语法是:factory => :user.他们的意思是一样的.

  • 请注意,非hashrocket语法是在Ruby 1.9中添加的,并且在早期版本中不存在. (10认同)
  • ruby有很多方法可以输入每个语句 (5认同)
  • @Arman Yup,就像在这里的答案:`:foo =>"bar"`,`foo:"bar"`和``foo":"bar"`是等价的,不同于``foo"=> "bar`和`foo =>"bar"`. (3认同)
  • @Arman不完全是,使用`:`总是使键成为文字符号,而`=>`不会发生这种情况.如果你想使用除文字符号(变量,字符串等)之外的任何东西作为键,你必须使用`=>`. (2认同)

Kev*_*ell 17

Ruby 1.8语法:

:factory => :user
Run Code Online (Sandbox Code Playgroud)

Ruby 1.9语法:

factory: :user
Run Code Online (Sandbox Code Playgroud)

请注意,Ruby 1.8语法也适用于1.9.

  • 添加这种新语法背后的理由是什么?我认为它比火箭/箭头更糟糕,火箭/箭头通常被理解为代表映射. (2认同)
  • 我不确定为什么会改变它.我google了一下,找不到任何明显的讨论.如果你发现一些背景请发布,我很感兴趣.Thanks1 (2认同)