Ruby &引用;“命名者”;红宝石色

Ruby &引用;“命名者”;红宝石色,ruby,loops,each,Ruby,Loops,Each,我一直试图用Ruby()解决这个代码战问题,但它总是给我这个错误,我不知道原因 main.rb:10:in `head_smash': undefined method `each' for "":String (NoMethodError) from main.rb:80:in `block in <main>' from /runner/frameworks/ruby/cw-2.rb:55:in `block in describe' from /runner

我一直试图用Ruby()解决这个代码战问题,但它总是给我这个错误,我不知道原因

main.rb:10:in `head_smash': undefined method `each' for "":String (NoMethodError)
from main.rb:80:in `block in <main>'
from /runner/frameworks/ruby/cw-2.rb:55:in `block in describe'
from /runner/frameworks/ruby/cw-2.rb:46:in `measure'
from /runner/frameworks/ruby/cw-2.rb:51:in `describe'
from main.rb:17:in `<main>'
谢谢

可能是这个测试(请参见测试中的第64行)导致代码失败:

Test.assert_equals(head_smash(''),'Gym is empty')
在该测试中,输入是空的
字符串
,但您的代码不检查字符串类型,至少处理空字符串。相反,当
arr
是字符串时,代码调用
arr.each

解决此特定问题的一个非常简单的方法是更改第一个条件

if arr == []
以下任何一项

if arr == [] || arr == ''

if [[], ''].include?(arr)

if arr.respond_to?(:empty?) && arr.empty?

公平地说,这部分挑战有点虚假——“如果提供的数组是空的,或者是空字符串,则返回'Gym is empty'”。真正的问题应该是如何处理
数组
输入,那么为什么它要求对空字符串进行特殊处理呢?如果我设计这个,我会认为所有非数组输入都是无效的,并以同样的方式处理它们。
if arr == [] || arr == ''

if [[], ''].include?(arr)

if arr.respond_to?(:empty?) && arr.empty?