1
几个月前,我一直在使用一些Ruby库(我不记得哪一个正好,不幸)红宝石营救不断失踪?
我一直惊讶地看到它让我初始化它的实例有类似的东西:
Lib::SOMETHING(args)
我真的不明白它是如何工作的。我非常确定它应该是动态的(没有SOMETHING常量),如constant_missing
模块方法,或者ConstantMissing
异常得到某种处理。
你能请指教吗?
几个月前,我一直在使用一些Ruby库(我不记得哪一个正好,不幸)红宝石营救不断失踪?
我一直惊讶地看到它让我初始化它的实例有类似的东西:
Lib::SOMETHING(args)
我真的不明白它是如何工作的。我非常确定它应该是动态的(没有SOMETHING常量),如constant_missing
模块方法,或者ConstantMissing
异常得到某种处理。
你能请指教吗?
没有魔法存在于理论上,它只是看起来陌生:
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)
对于班级方法来说,冲突线可以互换使用::
或.
来调用它们。
令人惊叹:)不知何故,它早早没有出现在我的脑海里。万分感谢! –
我也发现了const_missing方法(适用于类和模块) - method_missing的完全副本。当我发布这个问题时,我真的不认为这种方法可能是现实:) –
我想如果你需要更动态的东西,你也可以使用'const_missing'。但是在Net :: HTTP :: Proxy的情况下,显然没有必要这样做。 – emboss