红宝石救援不断失踪?

时间:2011-08-20 17:52:33

标签: ruby metaprogramming

几个月前我一直在使用一些红宝石库(不幸的是,我记不起哪一个了)

我很惊讶地看到它允许我用这样的东西初始化它的实例:

Lib::SOMETHING(args)

我真的不明白它是如何工作的。我非常确定它应该是动态的(没有SOMETHING常量),例如constant_missing模块方法,或者可能以某种方式处理ConstantMissing异常。

你可以请一下建议吗?

1 个答案:

答案 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::HTTPProxy类做类似的事情,它允许调用Net::HTTP::Proxy(...),它的定义类似:

def HTTP.Proxy(p_addr, p_port = nil, p_user = nil, p_pass = nil)

对于类方法,您可以互换使用::.来调用它们。