首页 > 解决方案 > `*': 否定参数 (ArgumentError) Ruby

问题描述

在 Codewars IDE 中运行此代码时,我不断收到此否定参数错误。它在终端中运行良好,但在 Codewars 中它都通过了测试并同时运行此错误消息。

STDERR
main.rb:5:in `*': negative argument (ArgumentError)
    from main.rb:5:in `maskify'
    from main.rb:9:in `<main>'

代码是

def maskify(cc)
  x = cc.to_s
  y = "#" * (x.length - 4)
  return y + x.slice(-4..-1)
end

我是 Ruby 的新手,但我没有听说它在 .slice 中使用负数有问题。我在这里错过了什么吗?谢谢。

标签: ruby

解决方案


您没有考虑cc短于 4 个符号的情况。

并且表达式"#" * (x.length - 4)会引发错误,因为您不能将字符串乘以负数。

尝试使用Array#max方法来处理这个:

"#" * [x.length - 4, 0].max

推荐阅读