0

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

4

3 回答 3

3

:实际上只是您自己输入或通过方法创建的文字的一部分。尽管:可以使用名称或 a"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']

于 2013-08-10T13:56:53.103 回答
1

Ruby 关于符号文字的文档是这样说的:

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

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

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

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

于 2013-08-10T13:27:13.037 回答
-1

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

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

puts hash[:"a b c"]

--output:--
10

所以第一个。从文档:

[符号] 使用 :name 和 :"name" 文字语法以及各种 to_sym 方法生成。

于 2013-08-10T13:43:35.373 回答