我正在尝试从为RubyQuiz创建的一些代码中学习,但它似乎是使用旧版本的Ruby构建的,现在当我尝试使用1.9.2时会抛出错误。运行测试时出现此错误
in `>=': comparison of Fixnum with String failed (ArgumentError)
运行'if 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
答案 0 :(得分:1)
?A
用于返回Ruby 1.8
中字符的ascii代码,但现在返回Ruby 1.9
中的字符本身。您应该?A
替换'A'.ord
。
在Ruby 1.8.x
?A
#=> 65
在Ruby 1.9.x
?A
#=> "A"
Ruby 1.8.x
和1.9.x
'A'.ord
#=> 65