将固定数字与字符串进行比较

时间:2012-11-19 02:39:43

标签: ruby

我正在尝试从为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

1 个答案:

答案 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.x1.9.x

'A'.ord
#=> 65