Ruby:冒号之前vs之后

在使用Ruby的时候,我一直在和:混淆。

有人可以请解释什么时候我应该使用它之前的variables名称,如:name ,以及当我应该使用variables后如name:

一个例子就是崇高。

欢迎您在创buildHash同时,

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

但基本上:name是Ruby中的一个Symbol对象。

从文档

当你的键总是符号时,哈希允许使用替代的语法forms。 代替

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

你可以把它写成:

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

这与variables完全无关。

:foo是一个Symbol字面值,就像'foo'是一个String字面值, 42是一个Integer面值。

foo:在三个地方使用:

  • 作为Symbol文字的替代语法作为Hash文字的关键字: { foo: 42 } # the same as { :foo => 42 }
  • 在声明关键字参数的参数列表中: def foo(bar:) end
  • 在传递关键字参数的参数列表中: foo(bar: 42)

:name是一个符号。 name: "Bob"是一个用符号定义Hash的特殊短语法:name一个键:name和一个string"Bob"作为一个值,否则将被写为{ :name => "Bob" }

您可以在创build散列之后使用它。

当你想引用一个符号时,你可以使用它。

在奥雅纳的例子中, {name: 'foo'}您正在创build一个符号,并将其用作关键字。

稍后,如果该散列存储在variablesbaz中,则可以将创build的键作为符号引用:

baz[:name]