2011-12-13 61 views
3
class Person 
    DEFAULT_MALE_NAME = "Joe" 
    DEFAULT_FEMALE_NAME = "Jane" 

    def give_default_name 
    self.name = self.class.send("DEFAULT_#{gender.upcase}_NAME") 
    end 

end 

這不起作用,因爲「self.class.send」最終會調用User.DEFAULT_MALE_NAME,我希望它執行User :: DEFAULT_MALE_NAME。什麼是範圍解析運算符的「發送」等效物?

什麼是「發送」的「::」等值?

回答

5

const_get,但你應該通過不斷的名字作爲一個符號

self.class.const_get(:"DEFAULT_#{gender.upcase}_NAME") 
+0

嗯,也適用於字符串爲好,至少在1.9.2 –

+0

好吧,也許「需要」是一個有點強。我是以文檔爲基礎的 – Gareth

相關問題