索引中的变量加法在ruby中返回nil

时间:2015-09-29 18:51:11

标签: ruby

当我尝试使用条件迭代字符串中的索引时,我现在在练习中遇到过这个错误两次。当我用个别情况打破它时,逻辑似乎有效,但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,它找到零。有没有办法用我的方法表达这个或者我需要重新整理整个循环吗?

1 个答案:

答案 0 :(得分:1)

您的is_num功能并未考虑nil.to_i0。这就是您收到错误的原因,因为您正试图将nil附加到字符串中。你需要使用这样的东西:

def is_num(num)
  # convert string to integer and back to string should be equal to string itself
  num.to_i.to_s == num 
end

或者,如果您想确保连接字符串,只需将参数转换为字符串

即可
mult << str[i+n].to_s # nil gets converted to an empty string