2010-10-19 182 views
3
class Foo 
    @@default = "default" 

    p instance_variables 
    p class_variables 

    class << self 
    p instance_variables 
    p class_variables 

    # How do I access the @@default variable here? 
    end 
end 

回答

2

在任何其他地方都可以這樣做:@@default

我不知道什麼p ..是應該做的(紅寶石是不是我的母語),但這個工程

class Foo 
    @@default = "default" 

    class << self 
    puts "#{@@default}" 
    end 
end 
+0

嗯,我覺得很蠢。謝謝= p – RyanScottLewis 2010-10-19 21:08:15

+3

'p'是寫'puts'的懶惰方法:P – david4dev 2010-10-19 21:34:36

+1

方法「p」調用'#inspect',然後在結果上調用'puts()'。它更像是一種調試方法,而'puts()'是一種通用的輸出方法。 – DigitalRoss 2010-10-19 22:23:44

1

這個問題是怎麼樣的有趣,因爲它本質上問:「有什麼辦法對於元類來引用它的「真實」類?

據我所知,答案是「否」,因爲所有「向上」祖先指針Ruby保持也指向元類,所以運行class_variables()在其中一個會告訴你它的類實例變量。所以,你必須通過名稱來引用對象,或者只是在進入元類上下文之前建立一個句柄...

class Foo 
    @@default = "default" 
    @@me = self 

    p instance_variables 
    p class_variables 

    class << self 
    p instance_variables 
    p @@me.class_variables 
    end 
end