Ruby: deux points avant ou après

En utilisant Ruby, je continue à me mêler à:.

Quelqu’un peut-il s’il vous plaît expliquer quand je suis censé l’utiliser avant le nom de la variable, comme :name , et quand je suis censé l’utiliser après la variable comme name: 😕

Un exemple serait sublime.

Vous êtes les bienvenus pour les deux, tout en créant Hash :

 {:name => "foo"} #or {name: 'foo'} # This is allowed since Ruby 1.9 

Mais fondamentalement :name est un object Symbol dans Ruby.

De docs

Les hachages permettent une autre forme de syntaxe lorsque vos clés sont toujours des symboles. Au lieu de

 options = { :font_size => 10, :font_family => "Arial" } 

Vous pourriez l’écrire comme:

 options = { font_size: 10, font_family: "Arial" } 

Cela n’a absolument rien à voir avec les variables.

:foo est un littéral Symbol , tout comme 'foo' est un littéral Ssortingng et 42 est un littéral Integer .

foo: est utilisé dans trois endroits:

  • comme une syntaxe alternative pour les littéraux de symboles comme clé d’un littéral Hash : { foo: 42 } # the same as { :foo => 42 }
  • dans une liste de parameters pour déclarer un paramètre de mot-clé: def foo(bar:) end
  • dans une liste d’arguments pour passer un mot clé argument: foo(bar: 42)

:name est un symbole. name: "Bob" est une syntaxe spéciale pour définir un Hash avec le symbole :name une clé et la chaîne "Bob" comme une valeur, qui serait autrement écrite comme { :name => "Bob" } .

Vous pouvez l’utiliser après lorsque vous créez un hachage.

Vous l’utilisez avant lorsque vous souhaitez référencer un symbole.

Dans l’exemple d’Arup, {name: 'foo'} vous créez un symbole et vous l’utilisez comme clé.

Plus tard, si ce hachage est stocké dans une variable baz, vous pouvez référencer la clé créée en tant que symbole:

baz[:name]