符号文字或方法

时间:2013-08-10 13:18:01

标签: ruby symbols literals

带引号的:"foo":'foo'符号是符号文字,还是:字符串上的一元运算符?

3 个答案:

答案 0 :(得分:3)

:实际上只是您自己输入或通过方法创建的文字的一部分。虽然:可以使用名称或"string"来创建文字,但与操作符不同,它不会引发任何操作或修改值。

在每种情况下都返回一个Symbol实例。用字符串表示法编写:有时很重要。例如,如果要表示包含空格作为符号的字符串,则需要使用字符串表示法。

> :foo
=> :foo 

> :foo bar
SyntaxError: (irb):2: syntax error, unexpected tIDENTIFIER, expecting end-of-input

> :"foo bar"
=> :"foo bar"

此外,使用等于运算符(==)

来探索它是很有趣的
> :"foo" == :foo
=> true 

> :"foo " == :foo
=> false

我的建议是,不要将它视为传递字符串或名称来创建符号,而是用不同的方式表达相同的符号。最后,您输入的内容将被解释为一个对象。这可以通过不同的方式实现。

> :"foo"
=> :foo

毕竟,%w(foo bar)也是另一种撰写['foo', 'bar']的方法。

答案 1 :(得分:1)

Ruby's documentation on Symbol literals说:

  

您可以使用冒号引用符号::my_symbol

     

您也可以通过插值创建符号:

:"my_symbol1"
:"my_symbol#{1 + 1}"

基本上:"foo":'foo'是符号文字,但是当您想使用插值创建符号时它们非常有用。

答案 2 :(得分:-1)

如果您的符号有空格,您还需要引号:

hash = {
  :"a b c" => 10,
  :"x y z" => 20,
}

puts hash[:"a b c"]

--output:--
10

所以第一个。来自文档:

  

[Symbols]使用:name和:“name”文字语法生成,并使用   各种to_sym方法。