如何包括在
问题描述:
在我的创业板模块包含在其他宝石类,它是由一个自定义类的Rails应用程序扩展一个类模块:如何包括在
我的宝石:
module MyGem
def my_method
end
end
AnotherGem.send :include, MyGem
另一宝石:
class AnotherGem
end
类中的Rails应用:
class ClassInRailsApp < AnotherGem
end
运行这将导致以下行为:
$ rails c
Loading development environment (Rails 5.1.4)
irb(main):004:0> MyGem.method_defined? :my_method
=> true
irb(main):005:0> AnotherGem.method_defined? :my_method
=> true
irb(main):006:0> ClassInRailsApp.method_defined? :my_method
NoMethodError: undefined method `my_method' for ClassInRailsApp:Class
我怎样才能确保该类扩展,才能将我的模块?
编辑:
我试图直接包括ClassInRailsApp
MyGem
和指定实例方法仍然是不可用的。这个问题是否与此有关?
答
在你的想法中,你只是调用一个方法,例如@ object.my_method。实际上,您正在调用Class level方法,例如Object.my_method,但将其定义为实例级别的方法。正确的方法来做你想要的是Object.new.my_method,但是,不要那样做。
要调用这样的方法,您必须将其定义为类上的方法。请参阅this page,以获得更好的理解。特别是关于如何通过模块定义类级别方法的“常见成语”部分。
你这里的例子代码实际上产生'true',所以我不确定你的问题到底是什么。这应该有效,并且对我有用。 – tadman