具有来自includer类的静态方法调用的Ruby模块

具有来自includer类的静态方法调用的Ruby模块,ruby,include,module,constants,Ruby,Include,Module,Constants,我需要在使用包含此模块的类中的方法的模块中定义常量: module B def self.included(base) class << base CONST = self.find end end end class A def self.find "AAA" end include B end puts A::CONST 模块B def自带(基本) 类在您的特定情况下 module B def self.inclu

我需要在使用包含此模块的类中的方法的模块中定义常量:

module B 
  def self.included(base)
    class << base
  CONST = self.find
    end
  end
end 

class A
  def self.find
    "AAA"
  end
  include B 
end

puts A::CONST
模块B
def自带(基本)
类在您的特定情况下

module B 
  def self.included(base)
    base.const_set("CONST", base.find)
  end
end 

class A
  def self.find
    "AAA"
  end
  include B 
end

puts A::CONST

尽管有效,但还是有点乱。你确定不能用不同的方法来实现你的目标吗?

在Ruby中实现这一目标的更惯用的方法是:

module B 
  def self.included(klass)
    klass.class_eval <<-ruby_eval
      CONST = find
    ruby_eval

    # note that the block form of class_eval won't work
    # because you can't assign a constant inside a method
  end
end

class A
  def self.find
    "AAA"
  end
  include B 
end

puts A::CONST
不确定这是否有帮助,但如果您不理解,您仍然可以使用上面的class\u eval习惯用法。

模块B
module B 
  def self.included(base)
    class << base
      CONST = self.find
    end
  end
end 

class A
  class << self
    def self.find
       "AAA"
    end
  end
  include B 
end
def自带(基本)
是的,我也得到了这个解决方案。但那个元呼叫不是个好主意。还有更直接的方法吗?您正在尝试在运行时动态分配一个常量值。另外,其他方法将引发“动态常数赋值”错误。
module B 
  def self.included(base)
    class << base
      CONST = self.find
    end
  end
end 

class A
  class << self
    def self.find
       "AAA"
    end
  end
  include B 
end