我正在学习使用codeacadamy.com的Ruby,当前的任务是创建一个包含电影列表的散列。所以,作为我,我拍的第一部电影是300部。
movies = {
300: 3,
titanic: 1,
joe_versus_the_volcanoe: 3
}我注意到300人犯了一个错误:
(ruby):1: syntax error, unexpected ':', expecting tASSOC
300: 3,
^这很有道理,但后来我试着用字符串。
puts "300".intern
puts "300".to_sym
puts :300前两个是有效的符号,输出300到屏幕,但最后一个抛出一个错误。我理解300应该出错,因为它不是以有效的方法字符(据我所知)开始,但是.to_sym和.intern在做什么使"300"成为一个有效的符号呢?
发布于 2014-01-08 20:53:28
puts "300".to_sym创建的符号不是用Fixnum创建的,而是用字符串创建的。你好像把Fixnum和字符串混在一起了。
:"300"是一个有效的符号
:300不是
键入puts "300".to_sym时,它将返回:"300"
1.9.3-p484 :002 > "300".to_sym
=> :"300" 你也可以很容易地把你的哈希
1.9.3-p484 :013 > hsh = {
1.9.3-p484 :014 > :"300" => 3,
1.9.3-p484 :015 > :something_else => 2
1.9.3-p484 :016?> }
=> {:"300"=>3, :something_else=>2}
1.9.3-p484 :017 > hsh[:"300"]
=> 3 那会很好的。
如果您试图将to_sym发送到Fixnum,您的问题将得到更准确的描述。
1.9.3-p484 :018 > 300.to_sym
NoMethodError: undefined method `to_sym' for 300:Fixnum
from (irb):18
from /Users/rsahae/.rvm/rubies/ruby-1.9.3-p327/bin/irb:18:in `<main>'发布于 2014-01-08 21:05:29
您可以在符号中放置任何您想要的字符,但不能使用符号文本的:name语法。
"1 whole sentence with all sorts of characters!".to_sym
#=> :"1 whole sentence with all sorts of characters!"您可以使用的另一种符号文字语法是:"string"语法:
movies = {
:"300" => 3,
:titanic => 1,
:joe_versus_the_volcanoe => 3
}
#=> {:"300"=>3, :titanic=>1, :joe_versus_the_volcanoe=>3}发布于 2014-01-08 20:55:00
puts :300不会因为它没有以有效的方法字符开始而失败,而是因为300不是一个字符串而失败。puts :"300"确实能工作。
https://stackoverflow.com/questions/21005983
复制相似问题