在另一个类中使用模块的类

时间:2018-02-05 23:25:24

标签: ruby-on-rails ruby rubygems

我创造了一个宝石:

module Core
  require "lib/doctor"
  require "lib/slot"
end

module Core
  class Doctor
    def message
      puts Slot.message
    end
  end
end

module Core
  class Slot
    def message
      return "Hello World"
    end
  end
end

如果我使用我获得的宝石:

Gem Load Error is: uninitialized constant Core::Doctor::Slot

1 个答案:

答案 0 :(得分:3)

从错误中可以看出,ruby正试图在Slot的上下文中加载常量Core::Doctor。但是,您希望在Slot的上下文中使用Core。所以,试试:

module Core
  class Doctor
    def message
      puts Core::Slot.message
    end
  end
end

另外,这里:

puts Core::Slot.message

您尝试将message作为类方法调用。但是,这里:

module Core
  class Slot
    def message
      return "Hello World"
    end
  end
end

您将message定义为实例方法。

如果您希望message成为类方法,则需要执行以下操作:

module Core
  class Slot
    def self.message
      return "Hello World"
    end
  end
end

module Core
  class Slot
    class << self
      def message
        return "Hello World"
      end
    end
  end
end

(取决于您的偏好)。如果您想保留message作为实例方法,那么您需要执行以下操作:

puts Core::Slot.new.message