Ruby:结肠前后vs

时间:2014-07-09 19:06:16

标签: ruby

使用Ruby时,我不断与:混淆。

有人可以解释我应该在变量名称之前使用它,比如:name,以及我应该在变量之后使用它name:吗?

一个例子就是崇高。

4 个答案:

答案 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字面值一样,42Integer字面值。

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]