2017-02-12 64 views
0

我有一个非常简单的方法,检查一个字符串是否以不允许的结尾列表中的一个结尾,值可能为零或空。我有这个检查,但我仍然不断得到下面的错误,如果我不抓住这种情况? 它是Ruby 1.9。未定义的方法`end_with?'为零:NilClass,但首先检查零

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 

回答

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 
    
+0

'返回TRUE;也将有助于 –

+0

@CarlMarkham是的,竟是编辑答案:) –

+0

我曾经写的第一个Ruby代码:P – Androme

-1

您需要return false检查value.nil? || value.empty?后。简单地说明false不会导致该方法返回并且其下面的代码仍将被执行。

+0

并且你的回答带来了......与已经给出的相比较吗? :) –

+0

没有。当我写这篇文章时,我还没有看到你的答案。你的回答确实比较完整。 –

相关问题