gpt4 book ai didi

ruby - 将字符串强制转换为 Fixnum

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:09 25 4
gpt4 key购买 nike

我正在查看用 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 < 1
return c
end

def process(s, &combiner)
s = sanitize(s)
out = ""
s.each_byte { |c|
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

最佳答案

您不能使用“+”运算符将字符串添加到整数。在 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。希望这会有所帮助。

关于ruby - 将字符串强制转换为 Fixnum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13447006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com