【问题标题】:Ruby no implicit conversion of Fixnum into String (TypeError)... to_i not workingRuby 没有将 Fixnum 隐式转换为字符串(TypeError)... to_i 不起作用
【发布时间】:2016-06-28 02:44:01
【问题描述】:

我正在学习 Ruby 并尝试解决以下挑战:

编写一个接收整数 num 并返回从零到 num 的所有整数之和的方法,直到 num 并包括在内。

我想出了:

def sum_nums(num)
    sum = ""
    num = num.to_i
    if num > 0
        while num > 0
            sum = sum + num
            num = num - 1
        end
    end
    if num == 0
        sum = 0 
    end
    if num < 0
        while x < 0
            sum = sum + num
            num = num + 1
        end
    end
    return sum 
end

在第 6 行收到 Fixnum 字符串错误,无法自行排除故障。我尝试将 num 转换为整数,即使这对我来说没有意义,因为我编写了不需要 to_i 的类似方法。但是对于我遗漏的显而易见的事情完全迷失了。

【问题讨论】:

  • 您不能添加字符串和数字,因此,虽然您之前可能没有使用过to_i,但您也没有做“类似”的事情。您要么从两个数字开始,要么正在执行字符串连接。
  • 只有一个问题:错误消息告诉您它需要一个字符串但得到一个数字,您尝试通过转换为数字来解决该问题?为什么?它告诉你它已经得到一个数字,所以你知道它已经是一个数字,那是错误,它需要一个字符串而是。

标签: ruby fixnum


【解决方案1】:

您的错误是尝试将字符串 "" 与数字 num 添加的结果。

与尝试转换类型的 JavaScript 不同,Ruby 不允许您将不同的类型与数学运算符一起使用(除非它们是数字的,例如浮点数或整数)。

正确的第 2 行说:sum = 0

【讨论】:

  • @LeeEames:除了@PetrGazarov 的评论,想想num = num.to_i 是否真的是你想要的。你说你的方法需要一个整数。如果这是真的,没有理由申请to_i。如果不是这种情况,即如果您的方法还接受除 Integer 之外的其他数据类型,请考虑可能的情况,以及 to_i 是否真的合适。例如,当num 被赋予字符串"25abc" 时,转换to_i 不会引发异常,而是默默地忽略这些字母并只返回25。这可能是也可能不是您想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多