使用Ruby时,我不断与:
混淆。
有人可以解释我应该在变量名称之前使用它,比如:name
,以及我应该在变量之后使用它name:
吗?
一个例子就是崇高。
答案 0 :(得分:42)
欢迎您同时创建Hash
:
{:name => "foo"}
#or
{name: 'foo'} # This is allowed since Ruby 1.9
但基本上:name
是Ruby中的Symbol
对象。
来自docs
当您的键始终是符号时,哈希允许使用其他语法形式。而不是
options = { :font_size => 10, :font_family => "Arial" }
你可以把它写成:
options = { font_size: 10, font_family: "Arial" }
答案 1 :(得分:31)
这与变量完全无关。
:foo
是一个Symbol
字面值,就像'foo'
是String
字面值一样,42
是Integer
字面值。
foo:
用于三个地方:
Symbol
文字的替代语法,作为Hash
文字的关键:{ foo: 42 } # the same as { :foo => 42 }
def foo(bar:) end
foo(bar: 42)
答案 2 :(得分:10)
:name
是一个符号。 name: "Bob"
是一种特殊的简写语法,用于定义带有符号:name
密钥和字符串"Bob"
作为值的哈希,否则将写为{ :name => "Bob" }
。
答案 3 :(得分:1)
您可以在创建哈希值后使用它。
您希望在引用符号之前使用它。
在Arup的例子中,{name: 'foo'}
您正在创建一个符号,并将其用作关键字。
稍后,如果该哈希存储在变量baz中,您可以将创建的密钥作为符号引用:
baz[:name]