ロボット名というコーディングの課題に取り組んでいました。そのためのテストも受けました。プログラムはすべてのテストに合格しました。コードは以下の..
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
テスト ファイルが必要な場合は、ここでrobot_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
. 提供されたコードを考慮して、なぜこのエラーが発生し、両方のケースで舞台裏で何が起こっているのでしょうか? ありがとう!