"NoMethodError" 在 Ruby
"NoMethodError" in Ruby
一直在尝试用 Ruby (https://www.codewars.com/kata/57061b6fcb7293901a000ac7/train/ruby) 解决这个 Codewars 问题,但它一直给我这个错误,我不知道原因。
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>'
我解决这个问题的代码是这个:
def head_smash(arr)
arr1 = []
if arr == []
return 'Gym is empty'
elsif arr.is_a?(Integer) == true
return 'This isn\'t the gym!!'
else
arr.each do |i|
arr1.append(i.gsub(/O/, ' '))
end
end
return arr1
end
谢谢!
可能是此测试(请参阅测试中的第 64 行 exercise)导致您的代码失败:
Test.assert_equals(head_smash(''),'Gym is empty')
在该测试中,输入为空 String
但您的代码不会检查字符串类型,至少会处理空字符串。相反,当 arr
是字符串时,您的代码会调用 arr.each
。
解决此特定问题的一种非常简单的方法是更改第一个条件
if arr == []
以下任何一项
if arr == [] || arr == ''
if [[], ''].include?(arr)
if arr.respond_to?(:empty?) && arr.empty?
一直在尝试用 Ruby (https://www.codewars.com/kata/57061b6fcb7293901a000ac7/train/ruby) 解决这个 Codewars 问题,但它一直给我这个错误,我不知道原因。
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>'
我解决这个问题的代码是这个:
def head_smash(arr)
arr1 = []
if arr == []
return 'Gym is empty'
elsif arr.is_a?(Integer) == true
return 'This isn\'t the gym!!'
else
arr.each do |i|
arr1.append(i.gsub(/O/, ' '))
end
end
return arr1
end
谢谢!
可能是此测试(请参阅测试中的第 64 行 exercise)导致您的代码失败:
Test.assert_equals(head_smash(''),'Gym is empty')
在该测试中,输入为空 String
但您的代码不会检查字符串类型,至少会处理空字符串。相反,当 arr
是字符串时,您的代码会调用 arr.each
。
解决此特定问题的一种非常简单的方法是更改第一个条件
if arr == []
以下任何一项
if arr == [] || arr == ''
if [[], ''].include?(arr)
if arr.respond_to?(:empty?) && arr.empty?