Ruby: двоеточие перед vs после [дубликат]
этот вопрос уже есть ответ здесь:
- Есть ли разница между хэш-нотациями`: key => "value" `и` key: "value"'? 5 ответов
при использовании Ruby, я продолжаю путаться с :
.
может кто-нибудь объяснить, когда я должен использовать его перед именем переменной, как :name
, и когда я должен использовать его после переменной, как name:
?
пример был бы возвышенным.
4 ответа:
вы приветствуетесь для обоих, при создании
Hash
:{:name => "foo"} #or {name: 'foo'} # This is allowed since Ruby 1.9
но в основном
:name
этоSymbol
объект в Ruby.С docs
хэши позволяют использовать альтернативную синтаксическую форму, когда ваши ключи всегда являются символами. Вместо
options = { :font_size => 10, :font_family => "Arial" }
вы могли бы написать так:
options = { font_size: 10, font_family: "Arial" }
это не имеет абсолютно никакого отношения к переменным.
:foo
ЭтоSymbol
буквальный, как'foo'
этоString
буквальное и42
этоInteger
литерал.
foo:
используется в трех местах:
- в качестве альтернативного синтаксиса для
Symbol
литералы как ключ aHash
литерал:{ foo: 42 } # the same as { :foo => 42 }
- в списке параметров для объявления параметра сайта:
def foo(bar:) end
- в списке аргументов для передачи ключевое слово аргумент:
foo(bar: 42)
:name
символ.name: "Bob"
- это специальный синтаксис короткой руки для определения хэша с символом:name
ключ и строку"Bob"
как значение, которое в противном случае было бы записано как{ :name => "Bob" }
.
вы можете использовать его после того, как вы создаете хэш.
вы используете его, когда вы хотите ссылаться на символ.
в компании "Arup", например,
{name: 'foo'}
вы создаете символ, и использовать его в качестве ключа.позже, если этот хэш хранится в переменной baz, вы можете ссылаться на созданный ключ как на символ:
baz[:name]