将字符串强制转换为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
。 希望这可以帮助。