ruby 救援常失踪?

标签 ruby metaprogramming

几个月前我一直在使用一些 ruby​​ 库(不幸的是我不记得到底是哪个)

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

Lib::SOMETHING(args)

我真的不明白它是如何工作的。我非常确定它应该是动态的(没有一些常量),比如 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)

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

关于 ruby 救援常失踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133557/

相关文章:

ruby - 用元素填充数组 N 次

ruby-on-rails - Rails API : params' tempfile contains null bites from upload and fails to read, 但如果在本地抓取则读取正常

javascript - 身份保持膜代理的用例是什么?

python - 从此类的 python 实例生成类的 python 代码

由类型创建的类的Python元类

ruby - 最矮的 ruby 蒯因

ruby - 在正则表达式中使用否定条件

c++ - 选择模板参数包中的每个偶数(或奇数)参数

ruby - *(星号)在 Ruby 中是什么意思?

C++ 元编程问题/挑战以生成基于它的函数调用的类型