2012-11-19 135 views
1

我試圖從爲RubyQuiz創建的一些代碼中學習,但它似乎是使用舊版本的Ruby構建的,當我嘗試使用1.9.2時,現在會拋出一個錯誤。運行測試將固定數字與字符串進行比較

in `>=': comparison of Fixnum with String failed (ArgumentError) 

當這條線 '如果c> =?A和C < =?Z' 我得到這個錯誤。由於缺乏經驗,我不確定這是否可以在函數本身中進行調整,或者如果我需要發佈整個代碼,這可能不值得。請指教

def process(s, &combiner) 
    s = sanitize(s) 
    out = "" 
    s.each_byte { |c| 
     if c >= ?A and c <= ?Z   #error 
     key = @keystream.get 
     res = combiner.call(c, key[0]) 
     out << res.chr 
     else 
     out << c.chr 
     end 
    } 
    return out 
    end 

回答

1

用於返回字符的ASCII碼Ruby 1.8,但現在在Ruby 1.9返回字符本身?A。您應該用'A'.ord替換?A

Ruby 1.8.x

?A 
#=> 65 

Ruby 1.9.x

?A 
#=> "A" 

在這兩個Ruby 1.8.x1.9.x

'A'.ord 
#=> 65 
+0

感謝,我會投你了當系統允許。如果你想在類似的問題(紅寶石1.8/1.9),請隨時看看這裏:http://stackoverflow.com/questions/13447006/coercing-string-to-a-fixnum – BrainLikeADullPencil