Ruby: двоеточие перед vs после [дубликат]


этот вопрос уже есть ответ здесь:

  • Есть ли разница между хэш-нотациями`: key => "value" `и` key: "value"'? 5 ответов

при использовании Ruby, я продолжаю путаться с :.

может кто-нибудь объяснить, когда я должен использовать его перед именем переменной, как :name, и когда я должен использовать его после переменной, как name:?

пример был бы возвышенным.

4 62

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 литералы как ключ a Hash литерал: { 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]