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]