【问题标题】:why doesn't this ruby code work为什么这个红宝石代码不起作用
【发布时间】:2016-04-19 11:09:31
【问题描述】:

这是一个练习题 - 编写一个需要几分钟的方法,并返回一个将数字格式化为 hours:minutes 的字符串。

def time_conversion(minutes)
    hours = minutes / 60
    mins = minutes % 60
    time = hours + ":" + mins
    return time
end

以下是测试是否有效。如果它们返回 true,则意味着我的代码可以正常工作。

puts('time_conversion(15) == "0:15": ' + (time_conversion(15) == '0:15').to_s)
puts('time_conversion(150) == "2:30": ' + (time_conversion(150) == '2:30').to_s)
puts('time_conversion(360) == "6:00": ' + (time_conversion(360) == '6:00').to_s)

有时我的前两个测试结果为真,但第三个测试行显示为假,即使代码将完全打印出所需的内容。

其他时候我收到以下错误:

字符串不能被强制转换为 Fixnum (repl):4:in +' (repl):4:intime_conversion' (repl):1:in `initialize'

请帮忙。

【问题讨论】:

  • 您不能在字符串中添加数字。运行irb并输入5 + 'foo',你会得到同样的错误。在您的 time_conversion 函数中尝试 time = hours.to_s + ':' + mins.to_s。甚至只是将整个函数内容替换为return "#{minutes/60}:#{minutes % 60}"
  • 哇。那成功了。我没有遇到过使用哈希,但这很有趣。我想这可以让我删除 mins 和 hours 变量
  • 是的,您可以删除这些变量。如果您想在会议记录中使用前导零,您应该查找“ruby 字符串格式”,例如6:05。您的 time_conversion 不会创建 6:00。它将创建6:0
  • 啊啊啊啊啊。如果分钟小于 10,我需要添加前导零。(作为字符串)但这很好。我爱这一切。谢谢!

标签: ruby


【解决方案1】:

错误主要是指这一行 time = hours + ":" + mins

hours & minsFixnum,而 ":" 是 String 如错误消息所示,“无法将字符串强制转换为 Fixnum”。

您可以使用time = hours.to_s + ":" + minutes.to_stime = "#{hours}:#{minutes}"

【讨论】:

  • 是的,潜伏者向我指出了同样的问题。我喜欢那里的最终建议。很简洁,谢谢!
  • 感谢您的支持,实际上是我在 stackoverflow 上的第一个答案!
  • 这很酷。等我自己起床后,在另一边见
【解决方案2】:

因为Fixnum#+ 采用Numeral 参数,而不是String

【讨论】:

  • 我在这里的第一个问题,我得到了超快的答复。谢谢!
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多