将字符串强制转换为Fixnum

我正在看一些用Ruby 1.8编写的RubyQuiz代码,当我在1.9.2中运行它时,它现在抛出一个错误。 这种方法

def encrypt(s) return process(s) {|c, key| 64 + mod(c + key - 128)} end 

给我以下错误

 in `+': String can't be coerced into Fixnum (TypeError) 

这是我的代码:

 def mod(c) return c - 26 if c > 26 return c + 26 if c = 'A'.ord and c <= 'Z'.ord key = @keystream.get res = combiner.call(c, key[0]) out << res.chr else out << c.chr end } return out end 

您不能使用’+’运算符将String添加到Integer。 在IRB,

  irb(main):001:0> 1 + '5' TypeError: String can't be coerced into Fixnum 

或者反过来说:

 irb(main):002:0> '5' + 1 TypeError: can't convert Fixnum into String 

您必须先将字符串转换为FixNum,即

 irb(main):003:0> '5'.to_i + 1 => 6 

要么

 irb(main):004:0> 1 + '5'.to_i => 6 

“to_i”将接受字符串第一部分中的整数部分并将其转换为FixNum:

 irb(main):006:0> 1 + '5five'.to_i => 6 

但是,当字符串没有数字时,您可能会得到意外的结果:

 irb(main):005:0> 1 + 'five'.to_i => 1 

在你的情况下,我认为你期望变量key的整数,但正在获得一个字符串。 你可能想做key.to_i 。 希望这可以帮助。