首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"300".intern有效,但:300不是

为什么"300".intern有效,但:300不是
EN

Stack Overflow用户
提问于 2014-01-08 20:36:56
回答 3查看 131关注 0票数 1

我正在学习使用codeacadamy.com的Ruby,当前的任务是创建一个包含电影列表的散列。所以,作为我,我拍的第一部电影是300部。

代码语言:javascript
复制
movies = {
  300: 3,
  titanic: 1,
  joe_versus_the_volcanoe: 3
}

我注意到300人犯了一个错误:

代码语言:javascript
复制
(ruby):1: syntax error, unexpected ':', expecting tASSOC
    300: 3,
        ^

这很有道理,但后来我试着用字符串。

代码语言:javascript
复制
puts "300".intern
puts "300".to_sym
puts :300

前两个是有效的符号,输出300到屏幕,但最后一个抛出一个错误。我理解300应该出错,因为它不是以有效的方法字符(据我所知)开始,但是.to_sym.intern在做什么使"300"成为一个有效的符号呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-08 20:53:28

puts "300".to_sym创建的符号不是用Fixnum创建的,而是用字符串创建的。你好像把Fixnum和字符串混在一起了。

:"300"是一个有效的符号

:300不是

键入puts "300".to_sym时,它将返回:"300"

代码语言:javascript
复制
1.9.3-p484 :002 > "300".to_sym
 => :"300" 

你也可以很容易地把你的哈希

代码语言:javascript
复制
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,您的问题将得到更准确的描述。

代码语言:javascript
复制
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>'
票数 4
EN

Stack Overflow用户

发布于 2014-01-08 21:05:29

您可以在符号中放置任何您想要的字符,但不能使用符号文本的:name语法。

代码语言:javascript
复制
"1 whole sentence with all sorts of characters!".to_sym
#=> :"1 whole sentence with all sorts of characters!"

您可以使用的另一种符号文字语法是:"string"语法:

代码语言:javascript
复制
movies = {
  :"300" => 3,
  :titanic => 1,
  :joe_versus_the_volcanoe => 3
}
#=> {:"300"=>3, :titanic=>1, :joe_versus_the_volcanoe=>3}
票数 1
EN

Stack Overflow用户

发布于 2014-01-08 20:55:00

代码语言:javascript
复制
puts :300

不会因为它没有以有效的方法字符开始而失败,而是因为300不是一个字符串而失败。puts :"300"确实能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21005983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档