19

我正在学习工厂女孩,我看到了这段代码:

factory :post do
  association :author, factory: :user, last_name: "Writely"
end

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

4

3 回答 3

33

此上下文中的冒号表示文字哈希。

factoryHash关键,:user是价值。

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

于 2012-05-18T01:41:58.360 回答
17

Ruby 1.8 语法:

:factory => :user

Ruby 1.9 语法:

factory: :user

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

于 2012-05-18T01:54:07.507 回答
0

其他答案都是对的。关于这种新语法背后的基本原理有一些猜测。这种变化可能与 Javascript 以及其他语言如何处理对象字面量表示法有关。或许,需要让 ruby​​ 更符合这些语言处理对象创建的方式。

例如,在 JavaScript 中,我们可以这样做:

var person = {
    name: "John",
    age: 42,
    married: false
}

所以说真的,当我们通过时factory: :user,我们真正在做的是通过{factory: :user},也写成{:factory => :user}。1.9 语法旨在使执行以下操作变得更容易{factory: "user"}

于 2014-06-20T15:57:31.740 回答