2014-01-20 81 views
0

我的Ruby代碼類中的以下塊:例外:未定義的方法`blacklisted_keywords'

def self.blacklisted_keywords 
    %w(acquista acquistiamo acquisto acquistano compro compriamo comprano) 
end 

private 

def item_valid? 
    keywords = blacklisted_keywords 
end 

我爲什麼不能叫blacklisted_keywords沒有得到:「未定義的方法`blacklisted_keywords'」?我究竟做錯了什麼?

回答

1

因爲blacklisted_keywords不是實例方法,而是類方法。 keywords = blacklisted_keywords意味着紅寶石隱含地看作keywords = self.blacklisted_keywords。這會導致錯誤,因爲它不是實例方法。將keywords = blacklisted_keywords替換爲keywords = self.class.blacklisted_keywords

0

根據提供的答案,如果不需要對它們進行變異,可能會將關鍵字保持爲常量。

class Blah 
    BLACKLISTED_KEYWORDS = %w(acquista acquistiamo acquisto acquistano compro compriamo comprano) 

    private 

    def item_valid? 
    keywords = BLACKLISTED_KEYWORDS 
    end 
end 
+1

常量不是線程安全的,所以我不能依賴於它們。 – Severin

+0

@Severin這沒有任何意義。 – Agis