2017-02-12 42 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

沒有。當我寫這篇文章時,我還沒有看到你的答案。你的回答確實比較完整。 –

相關問題