class A
class << self
CONST = 1
end
end
puts A::CONST # this doesn't work
有没有一种方法可以通过这个自调类访问类外部的常量?类方法中的红宝石常量
它有效地这样做:
class A
self.CONST = 1
end
我明白,我可以只移动不断进行这种自我调用来轻松解决这个问题。 我对Ruby的内部工作更加好奇。
class A
class << self
CONST = 1
end
end
puts A::CONST # this doesn't work
有没有一种方法可以通过这个自调类访问类外部的常量?类方法中的红宝石常量
它有效地这样做:
class A
self.CONST = 1
end
我明白,我可以只移动不断进行这种自我调用来轻松解决这个问题。 我对Ruby的内部工作更加好奇。
不是你想要什么,但你根本就没有定义CONST A级内,但在它的元类,这是我保存,因此一个参考......
class A
class << self
::AA = self
CONST = 1
end
end
puts AA::CONST
也可能不是正是你因为你在A的元类中引用A类(这看起来有点欺骗),但它稍微简洁一些。
class A
class << self
A::CONST = 1
end
end
对于正在发生的事情对这个职位的深入了解是相当翔实 http://www.klankboomklang.com/2007/10/05/the-metaclass/
你的问题是,你是错误的代码的含义。
class << self
FOO = :bar
end
不等于self.FOO = :bar
。这是非常不同的。它相当于self.singleton_class.const_set(:FOO, :bar)
。
我认为你认为class << self
的意思是“假设在我写的所有内容之前有一个隐含的”自我“或者沿着这些线(也许你正在考虑JavaScript的with
声明)。它的实际做法是把我们放到self
的单例类的背景中,这是一个特殊的类,其中当前对象是唯一的实例。所以你要定义对象的单例类的常量。
要定义一个类中的常数,你只写:
class Something
FOO = :bar
end
谢谢!我不明白self.method和class“self”是不同的。他们都是单身方法。如果您有机会,请在此处查看问题:http://stackoverflow.com/questions/5508351/in-ruby-whats-the-difference-between-self-method-and-a-method-within-class-se – djburdick 2011-04-01 01:43:13
为什么不设置一个类变量和使用? – Jimmy 2011-03-09 18:27:07