几个月前我一直在使用一些红宝石库(不幸的是,我记不起哪一个了)
我很惊讶地看到它允许我用这样的东西初始化它的实例:
Lib::SOMETHING(args)
我真的不明白它是如何工作的。我非常确定它应该是动态的(没有SOMETHING常量),例如constant_missing
模块方法,或者可能以某种方式处理ConstantMissing
异常。
你可以请一下建议吗?
答案 0 :(得分:5)
理论上没有魔法,只是看起来很陌生:
class A
def self.I_LOOK_LIKE_A_CONST(arg)
puts arg
end
end
A::I_LOOK_LIKE_A_CONST("Hi") # => "Hi"
Net::HTTP
与Proxy
类做类似的事情,它允许调用Net::HTTP::Proxy(...)
,它的定义类似:
def HTTP.Proxy(p_addr, p_port = nil, p_user = nil, p_pass = nil)
对于类方法,您可以互换使用::
或.
来调用它们。