2014-10-29 56 views
0

我试图在http://repl.it/languages/Ruby/运行下面的代码,但我遇到一个NoMethodError红宝石 - 无法转换单个字符的字符串,以ASCII

a = "string" 
a.each_char do |c| 
    puts c.ord 
end 

错误详细信息如下:

(eval):1: undefined method `ord' for "s":String (NoMethodError) 
    from (eval):0:in `each_char' 
    from (eval):0

请有人可以向我解释为什么我的代码不起作用?

+4

该代码的作用与编程的目的相同(打印每个字符的ASCII字符代码)。你想从中得到什么输出? – 2014-10-29 23:46:46

回答

0

这样的代码将打印每个字母的ascii代码。也许你正在查看返回值,这将是原始字符串“字符串”?

+0

嗯,这是奇怪的上面的代码不能在/http://repl.it/languages/Ruby/工作可能是由于红宝石版本? – user3451078 2014-10-30 01:11:16

1

each_char方法String将每个字符作为单独的String产生。

运行在repl.it上的Ruby版本已经很旧了(1.8.7)。该版本的Ruby中的String类未定义ord方法,因此代码无法与NoMethodError一起运行。

ord已被添加到Ruby 1.9中的String,所以您的代码将运行在较新版本的Ruby上。

关于Ruby 1.8.7(和repl.it),你可以使用下面的替代品,而不是一个:

a = "string" 
a.each_char do |c| 
    puts c[0] 
end 

a = "string" 
a.each_byte do |c| 
    puts c 
end 

但是,请注意,这些例子不会如果您的字符串使用多字节编码,则其行为与您的原始代码相同。 ord方法返回一个Unicode代码点。 Ruby 1.8.7的例子会给你个别的字节。