我有一个非常简单的方法,它检查一个字符串是否以一个不允许的结尾列表结尾,该值可能是nil或为空。我有一个检查,但我仍然得到下面的错误,如果我不抓住那个案例? 它是Ruby 1.9。
NoMethodError:
undefined method `end_with?' for nil:NilClass
守则
private
def self.validate_ending(value)
disallowedEndings = [", the", ", a ", ", an", ", das", ", die", ", der", ", ein"]
if value.nil? || value.empty?
false
end
for s in disallowedEndings
if value.end_with?(s)
true
end
end
false
end
答案 0 :(得分:1)
return false
可以解决您的问题(基本上return
是 使 代码流停止并从方法返回的内容)。
你的缩进很糟糕:)
这不是你如何声明私有类的单例方法。
以下是您的方法的外观:
DISALLOWED_ENDINGS = [", the", ", a ", ", an", ", das", ", die", ", der", ", ein"].freeze
singleton_class.class_eval do
private
def validate_ending(value)
return false if value.nil? || value.empty?
return true if DISALLOWED_ENDINGS.any? { |ending| value.end_with?(ending) }
false
end
end
答案 1 :(得分:-1)
检查return false
后,您需要value.nil? || value.empty?
。简单地说明false
不会导致方法返回,并且下面的代码仍然会被执行。