2012-11-19 74 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