2010-10-19 150 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