红宝石救援不断失踪?

Vla*_*ich 1 ruby metaprogramming

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

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

Lib::SOMETHING(args)
Run Code Online (Sandbox Code Playgroud)

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

你能建议吗?

emb*_*oss 5

理论上没有魔法,它看起来很陌生:

class A
  def self.I_LOOK_LIKE_A_CONST(arg)
    puts arg
  end
end

A::I_LOOK_LIKE_A_CONST("Hi") # => "Hi"
Run Code Online (Sandbox Code Playgroud)

Net::HTTP做类似于它的Proxy类,它允许调用,如Net::HTTP::Proxy(...),它的定义类似:

def HTTP.Proxy(p_addr, p_port = nil, p_user = nil, p_pass = nil)
Run Code Online (Sandbox Code Playgroud)

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