赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 110
- 在线时间
- 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
复制代码 如果方法是私有的,那么显式指定了接收者的方法调用就被不被允许。 |
|