我试图在我建造的宝石中使用Gmail宝石。从the source,您可以看到gem定义了Gmail模块/类,如此(简化):
module Gmail
class << self
def connect; end
end
end
我想要做的是将Gmail模块/类扩展为我自己的类。从本质上讲,这是我尝试做的一个通用示例:
module Foo
class << self
def example
puts :this_is_foo
end
end
end
class Bar
extend Foo
end
然后我应该可以致电:
Bar.example
但我得到以下例外:
NoMethodError: undefined method `example' for Bar:Class
如何在上面的示例中Foo
中提供Bar
中提供的方法?
答案 0 :(得分:2)
您可以使用included
作为目标:
module Foo
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def example
puts :this_is_foo
end
end
end
class Bar
include Foo
end
Bar.example
this_is_foo
#=> nil
或者,如果您只想包含类方法,可以创建example
方法实例并扩展Bar
模块:
module Foo
def example
puts :this_is_foo
end
end
class Bar
extend Foo
end
Bar.example
this_is_foo
#=> nil