2014-05-02 52 views
0

試圖建立一個枚舉爲紅寶石,所以我可以用於對應枚舉值檢索INT值。紅寶石模塊/枚舉檢索奇數值

我模塊的樣子:

module DataType 
    STRING = 1, 
    NUMBER = 2, 
    BOOLEAN = 3, 
    OBJECT = 4, 
    DATA = 5, 
    FILE = 6, 
    DATE = 7, 
    ARRAY = 8 
end 

如果我把這個比字符串以外的任何值,

DataType::Number 

它返回

2... 3, 4, 5, 6, 7, 8, 

但如果我叫

DataType::String 

它返回

[1, 2, 3, 4, 5, 6, 7, 8] 

如何以及爲什麼DataType::String返回所有枚舉值的數組?

回答

4

您可以通過逗號聲明常數:

module DataType 
    STRING = 1, 
    NUMBER = 2, 
    ........... 
end 

DataType::Number模塊,並從第二位置返回值第二的位置,你需要這個來代替:

module DataType 
    STRING = 1 
    NUMBER = 2 
    BOOLEAN = 3 
    .......... 
end 

現在DataType::Number回報2。並返回所有:

=> DataType.constants.map { |x| Hash[x, DataType.const_get(x)] } 
=> [{:STRING=>1}, {:NUMBER=>2}, {:BOOLEAN=>3}, {:OBJECT=>4}, {:DATA=>5}, {:FILE=>6}, {:DATE=>7}, {:ARRAY=>8}] 

如需幫助Module#constantsModule#const_get

+0

這工作。感謝您的幫助。我沒有真正理解Ruby模塊,所以現在我檢查了它們。更有意義。 –