In Ruby what is the meaning of colon after identif

2019-03-14 14:07发布

I'm learning about Factory Girl and I saw this code:

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

why do factory and last_name have a colon at their end?

标签: ruby syntax hash
3条回答
倾城 Initia
2楼-- · 2019-03-14 14:27

The other answers are right. There was some speculation regarding the rationale behind this new syntax. This change may have something to do with how Javascript and perhaps other languages handle object literal notation. A need was felt, perhaps, to bring ruby more in-line with how these languages handle object creation.

For example, in JavaScript, we can do:

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

So really, when we're passing factory: :user, what we're really doing is passing {factory: :user}, also written as {:factory => :user}. The 1.9 syntax is intended to make it easier to do something like {factory: "user"}

查看更多
祖国的老花朵
3楼-- · 2019-03-14 14:28

Ruby 1.8 syntax:

:factory => :user

Ruby 1.9 syntax:

factory: :user

Note that the Ruby 1.8 syntax works in 1.9 also.

查看更多
SAY GOODBYE
4楼-- · 2019-03-14 14:37

The colon in this context denotes a literal Hash.

factory is the Hash key, :user is the value.

The alternative syntax is :factory => :user. They mean the same thing.

查看更多
登录 后发表回答