Rubymonk 4.1标题为" included
回调和extend
方法"我要求我在下面的练习中修改模块Foo,这样当你将它包含在类Bar中时,它还会将ClassMethods中的所有方法作为类方法添加到Bar中。
module Foo
module ClassMethods
def guitar
"gently weeps"
end
end
end
class Bar
include Foo
end
puts Bar.guitar
必须在模块中定义self.included(base)方法,并使用ClassMethods扩展基础。
我一直在修修补补,无法弄明白。
指导请:D
答案 0 :(得分:3)
您定义了一个名为self.included(base)
的方法。
module Foo
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def hey
p "hey!"
end
end
end
class Bar
include Foo
end
puts Bar.hey #=> hey!
这是有效的,因为.included会在包含模块时随时调用。在.included
内部,您的代码使用ClassMethods
。
John Nunemaker在这里有一篇很好的帖子,详细信息如下:
更详细地查看帖子底部的问题答案。这是一个很好的阅读。
答案 1 :(得分:0)
module Foo
def self.included(base)
base.extend Foo::ClassMethods
end
module ClassMethods
def guitar
"gently weeps"
end
end
end
class Bar
include Foo
end
puts Bar.guitar
答案 2 :(得分:-1)
您需要使用ActiveSupport::Concern
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
module Foo
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def guitar
"gently weeps"
end
end
end
class Bar
include Foo
end
puts Bar.guitar