1

我正在尝试从为 RubyQuiz 创建的一些代码中学习,但它似乎是使用旧版本的 Ruby 构建的,当我尝试使用 1.9.2 时,它现在会引发错误。运行测试时出现此错误

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

运行'if c >= ?A and 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
4

1 回答 1

1

?A用于返回字符 in 的 ascii 码Ruby 1.8,但现在返回字符本身 in 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
于 2012-11-19T02:42:46.523 回答