ruby 多继承 mixin include exclude require load
2014-05-02 11:25
274 查看
首先定义一个Module:
module Foo
def bar
puts "foo";
end
end
然后我们把这个模块混入到对象中去:
class Demo
include Foo
end
如上编码后,模块中的实例方法就会被混入到对象中:
d=Demo.new
d.bar
会输出foo字样。
下面我们重新定义一下Demo类:
class Demo
extend Foo
end
这个时候如果你得到的就是静态调用:
Demo.bar
会输出foo字样。
下面我们再来重新定义一下Demo类:
class Demo
def bar
puts "demo"
end
end
然后使用extend方法调用:
d=Demo.new
d.extend(Foo)
d.bar
会输出foo字样。
下面我们再来重新定义一下Demo类:
class Demo
include Foo
def bar
puts "demo"
end
end
然后使用extend方法调用:
d=Demo.new
d.extend(Foo)
d.bar
会输出demo字样。
include主要用来将一个模块插入(mix)到一个类或者其它模块。
extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。
通常引用模块有以下3种情况:
1.在类定义中引入模块,使模块中的方法成为类的实例方法
这种情况是最常见的
直接 include <module name>即可
2.在类定义中引入模块,使模块中的方法成为类的类方法
这种情况也是比较常见的
直接 extend <module name>即可
3.在类定义中引入模块,既希望引入实例方法,也希望引入类方法
这个时候需要使用 include,
但是在模块中对类方法的定义有不同,定义出现在 方法
def self.included(c) ... end 中
require和load不同,它只加载文件一次,即在第一次执行到require时载入,以后碰到require同一文件时自动忽略,已经被加载的文件保存在$”中。另外,require还可以用来加载二进制格式的库。Require可以使用绝对路径或相对路径,如果使用了相对路径,那么系统会在$:变量包含的目录中搜寻。Require和load的另一个不同是当包含文件是Ruby代码时,require可以不加后缀名。Require将当前所有加载的文件保存在$"变量中。
module Foo
def bar
puts "foo";
end
end
然后我们把这个模块混入到对象中去:
class Demo
include Foo
end
如上编码后,模块中的实例方法就会被混入到对象中:
d=Demo.new
d.bar
会输出foo字样。
下面我们重新定义一下Demo类:
class Demo
extend Foo
end
这个时候如果你得到的就是静态调用:
Demo.bar
会输出foo字样。
下面我们再来重新定义一下Demo类:
class Demo
def bar
puts "demo"
end
end
然后使用extend方法调用:
d=Demo.new
d.extend(Foo)
d.bar
会输出foo字样。
下面我们再来重新定义一下Demo类:
class Demo
include Foo
def bar
puts "demo"
end
end
然后使用extend方法调用:
d=Demo.new
d.extend(Foo)
d.bar
会输出demo字样。
include主要用来将一个模块插入(mix)到一个类或者其它模块。
extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。
通常引用模块有以下3种情况:
1.在类定义中引入模块,使模块中的方法成为类的实例方法
这种情况是最常见的
直接 include <module name>即可
2.在类定义中引入模块,使模块中的方法成为类的类方法
这种情况也是比较常见的
直接 extend <module name>即可
3.在类定义中引入模块,既希望引入实例方法,也希望引入类方法
这个时候需要使用 include,
但是在模块中对类方法的定义有不同,定义出现在 方法
def self.included(c) ... end 中
require和load不同,它只加载文件一次,即在第一次执行到require时载入,以后碰到require同一文件时自动忽略,已经被加载的文件保存在$”中。另外,require还可以用来加载二进制格式的库。Require可以使用绝对路径或相对路径,如果使用了相对路径,那么系统会在$:变量包含的目录中搜寻。Require和load的另一个不同是当包含文件是Ruby代码时,require可以不加后缀名。Require将当前所有加载的文件保存在$"变量中。
相关文章推荐
- ruby的继承到底可以继承哪些东西
- RUBY的类封装,继承,多态简单演示
- Ruby简洁学习笔记(二):类继承、属性、类变量
- Ruby中实现module继承
- Ruby之旅(六) 模块以及类的多继承
- Ruby中的继承的一个问题
- ruby 类创建-继承-消息
- Ruby都从Perl那继承了什么?
- ruby中的构造函数和继承
- Ruby的多继承
- ruby的继承
- 模块全解======>>ruby的类是单继承生物、所以出现了module、实现了多继承
- Ruby 继承和消息
- Ruby 学习四 (类、对象和变量二 类的继承和属性)
- Ruby之旅(四) 类的继承
- Ruby on Rails 入门之:(14) Ruby中的继承
- Ruby优化继承类实例
- 浅析Ruby中继承和消息的相关知识
- Ruby继承
- Ruby之旅(六) 模块以及类的多继承