我正在处理名为机器人名称的编码挑战。我也对此进行了测试。该程序通过了所有测试。代码如下..
class Robot
attr_accessor :name
@@robots = []
def initialize
@name = self.random_name
@@robots << self.name
end
def random_name
name = ''
2.times do
name << ('a'..'z').to_a.sample
end
3.times do
name << (1..9).to_a.sample.to_s
end
no_duplicate(name.upcase)
end
def reset
@name = self.random_name
end
def no_duplicate(name)
if @@robots.include? name
reset
else
name
end
end
end
如果您需要查看测试文件,可以在此处查看robots_name_tests。
然后我开始重构,第一件事就是重构no_duplicate
方法。所以重构后的代码看起来像这样
class Robot
...
# the rest of code stayed the same
def no_duplicate(name)
@@robots.include? name ? reset : name
end
end
有了这个版本,所有的测试都显示出来了SystemStackError: stack level too deep
。考虑到提供的代码,为什么会出现此错误以及在这两种情况下的幕后情况?谢谢!