| 
 
| 赞 | 0 |  
| VIP | 2 |  
| 好人卡 | 27 |  
| 积分 | 1 |  
| 经验 | 26327 |  
| 最后登录 | 2019-10-13 |  
| 在线时间 | 953 小时 |  
 Lv1.梦旅人 
	梦石0 星屑120 在线时间953 小时注册时间2007-4-25帖子805 | 
| 一箭烂YiJL 发表于 2011-4-22 10:30 ![]() 回复 紫苏 的帖子
`include' 是 `Module' 的私有实例方法,就和 attr_reader、attr_accessor 等方法一样。当你在一个 module/class 的上下文中调用 include 的时候,其接收者(self)就是该 module/class 本身,它们是 Module 或 Class 的实例,也就相当于你这里的 `module_obj'。只不过由于 Module#include 是私有方法,所以 module_obj.include 这样的写法会有访问上的障碍。
 如果方法是私有的,那么显式指定了接收者的方法调用就被不被允许。复制代码
p Module.private_instance_methods.include? :include # => true
p Module.private_methods.include? :include          # => true
M = Module.new
# private method `include' called for #<Module:0x1d30e68> (NoMethodError)
M.include Math
M.method(:include).call Math                        # => OK
Module.instance_method(:include).bind(M).call Math  # => OK
M.send :include, Math                               # => OK
M.module_eval { include Math }                      # => OK
p M.foo
 | 
 |