module DM
def self.included(c)
puts c.class
c.extend MM
end
def set(a)
@a=a
end
module MM
def set(a)
@abc=a
end
def get
@abc
end
end
end
class TT
Abc=123
include DM
def self.setUrl(a)
@baseUrl=a
end
def self.getUrl
@baseUrl
end
def getUrl
@baseUrl
end
def setUrl(a)
@baseUrl=a
end
end
当TT extend了MM之后,MM中的不是self开头的方法中的@开头的变量,就变成了TT这个类的实例变量,相当于在TT的代码里加入了self.{MM的所有方法}。
由于TT同时也include了DM,但DM中的方法中的@开头的变量不是TT的类实例变量,而是TT的实例的实例变量,这个好理解。
继续:
类的实例方法中定义的或者说因引用而动态定义的@开头的变量,是实例变量!但是,类的self.开头的类方法中定义的@开头的变量是类实例变量!名称即便相同,但作用域不同所以完全不同。
我自己晕了,不知道哪里有ruby的清晰的继承关系的一个图,而且很想打开TT的singleton和TT的实例的singleton看一下,看看里面到底有什么!!请教打开看一下的方法,不是打开的方法。