【发布时间】:2015-09-29 18:51:11
【问题描述】:
当我尝试使用条件迭代字符串中的索引时,我在练习中遇到过这个错误两次。当我将其与个别案例分开时,逻辑似乎有效,但 Ruby 不喜欢它的表达方式。
def NumberAddition(str)
def is_num(num)
(0..9).include? num.to_i
end
i = 0
sum = 0
while i < str.length
if is_num(str[i])
if !is_num(str[i+1])
sum += str[i].to_i
else
mult = str[i]
n = 1
while is_num(str[i+n])
mult << str[i+n]
n += 1
end
sum += mult.to_i
end
end
i += 1
end
sum
end
NumberAddition("75Number9")
抛出此错误:
no implicit conversion of nil into String
(repl):18:in `NumberAddition'
换行:
mult << str[i+n]
显然不是为 str[i+n] 返回字符串“5”, 其中 i=0 和 n=1,它找到 nil。有没有办法用我的方法来表达这一点,还是我需要重新设计整个循环?
【问题讨论】:
-
你的代码太复杂了。请阅读本文,了解如何创建最小、完整和可验证的示例:stackoverflow.com/help/mcve
-
您的代码非常不像Ruby。我猜你来自一种大量使用索引的语言。鲁比没有。相反,它主要使用枚举器和块。你必须打破这种习惯才能有效地使用 Ruby。一旦你修复了你的代码,我建议你将它发布到Code Review。在那里你会得到关于如何改进它的好建议。
标签: ruby