【问题标题】:How to overwrite defined? operator?如何覆盖定义?操作员?
【发布时间】:2011-12-10 05:20:27
【问题描述】:

如果你有类似的东西:

module Real
  A = 1
end

当您执行defined?(Real::A) 时,您会得到“常量”,这是一个真实的值。现在,如果我这样做:

module Virtual
  def self.constants
    [:A] + super
  end
  def self.const_missing(sym)
    return 1 if sym == :A
    super
  end
  def self.const_defined?(sym)
    return true if sym == :A
    super
  end
end

defined?(Virtual::A) 返回零。有没有办法覆盖定义的?考虑元编程常量的行为?

【问题讨论】:

    标签: ruby metaprogramming constants


    【解决方案1】:

    defined? 实际上是一个运算符(而不仅仅是像+ 这样的语法糖),因此不能重新定义。正确的解决方案是不使用defined? 进行检查,而是使用前面提到的const_defined?defined? 不适用于元编程,而是在解析器级别工作,这就是为什么它可以提供有关表达式类型的相当详细的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多