在将单独的模块包含到单独的类
中之后,我使用实例方法扩展类有一些问题module ActsAsCommentable
def self.included(commentable)
Thread.class_eval do
def commentable
p "disqusable is #{commentable}"
p "disqusable class is #{commentable}"
end
end
end
end
class Thread
#some code...
end
class Asset
include ActsAsCommentable
end
现在我想把这个方法称为:
thread = Thread.new
thread.commentable
问题是,当然是没有与类eval的include方法绑定,我可以保存我想在ActsAsCommentable模块中传递给类eval的变量,但我不想这样做。还有更好的方法吗?
我试图改为
module ActsAsCommentable
def self.included(commentable)
class << Thread
define_method :commentable do
p "disqusable is #{commentable}"
p "disqusable class is #{commentable}"
end
end
end
end
但正如我猜测这会为类的单一对象创建实例方法,因此我只能通过
调用它Thread.commentable
再一次,没有约束力......
答案 0 :(得分:0)
如果我理解正确,您需要能够访问commentable
扩展程序中的Thread
变量,对吗?
如果是这样,只需更改:
Thread.class_eval do
对此:
Thread.class_exec(commentable) do |commentable|
它应该有用。