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]