:"foo"
和带引号的符号是:'foo'
符号文字,还是:
字符串上的一元运算符?
问问题
189 次
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 回答