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]