未定义的方法`end_with?'对于nil:NilClass但首先检查nil

时间:2017-02-12 19:55:26

标签: ruby

我有一个非常简单的方法,它检查一个字符串是否以一个不允许的结尾列表结尾,该值可能是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

2 个答案:

答案 0 :(得分:1)

  1. return false可以解决您的问题(基本上return 使 代码流停止并从方法返回的内容)。

  2. 你的缩进很糟糕:)

  3. 这不是你如何声明私有类的单例方法。

  4. 以下是您的方法的外观:

    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不会导致方法返回,并且下面的代码仍然会被执行。