2014-10-29 62 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的例子會給你個別的字節。