`
hanqingwxf2008
  • 浏览: 51348 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Ruby的include和extend

    博客分类:
  • ruby
 
阅读更多


在ruby中基本上有三种引入module的方式 
一、在类定义中引入module后,module中的方法成为类的实例方法。 
在类定义中用include引入module。 
例如: 
Ruby代码 
module Base 
def test 
p "This is a instance method!" 
end 
end 

class Car 
include Base 
end 
Car.new.test => "This is a instance method!" 

module Base
def test
p "This is a instance method!"
end
end

class Car
include Base
end
Car.new.test => "This is a instance method!"

二、在类定义中引入module后,module中的方法成为类的类方法。 
在类定义中用extend引入module。 
例如: 
Ruby代码  
module Base 
def test 
p "This is a instance method!" 
end 
end 

class Car 
extend Base 
end 
Car.test => "This is a class method!" 

module Base
def test
p "This is a instance method!" 
end
end

class Car
extend Base
end
Car.test => "This is a class method!"

三、在类定义中引入module后,module中的方法即有成为类的实例方法,又有成为类的类方法。 
这需要在类定义中引入module时,用include。 
例如: 
Ruby代码  
module Base 
def test 
p "This is a instance method!" 
end 
def self.included(base) 
def base.call 
p "This is a class method---call" 
end 
base.extend(ClassMethods) 
end 
module ClassMethods 
def hello 
p "This is a class method----hello" 
end 
end 
end 

class Car 
include Base 
end 

Car.new.test => "This is a instance method!" 
Car.call => "This is a class method---call" 
Car.hello => "This is a class method---hello" 

module Base
def test
p "This is a instance method!"
end
def self.included(base)
def base.call
p "This is a class method---call"
end
base.extend(ClassMethods)
end
module ClassMethods
def hello
p "This is a class method----hello"
end
end
end

class Car
include Base
end

Car.new.test => "This is a instance method!"
Car.call => "This is a class method---call"
Car.hello => "This is a class method---hello"

参考资料: 
1、http://developer.51cto.com/art/200907/132919.htm 
2、http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/ 

分享到:
评论

相关推荐

    Ruby on Rails中的include和extend的常见用法

    在Ruby on Rails中,`include`和`extend`是用来引入模块到类或对象中的关键语法,它们可以帮助我们更好地组织和重用代码。这两个关键字的主要区别在于它们如何将模块中的方法添加到目标类或对象。 首先,`include`...

    模块的力量:Ruby中include与extend的深度解析

    ### 模块的力量:Ruby中include与extend的深度解析...总之,通过理解和掌握`include`和`extend`这两个关键字,开发者可以在Ruby中更好地利用模块的力量来实现代码的复用和扩展,从而构建出更加高效和可维护的应用程序。

    Ruby中require、load、include、extend的区别介绍

    ### Ruby中require、load、include、extend的区别介绍 在Ruby编程语言中,为了实现代码的重用和组织,开发者经常需要引入外部文件或模块。在这一过程中,`require`、`load`、`include`、`extend`这几个关键字发挥了...

    ruby trap 初学者使用

    了解如何创建自定义类,继承和模块混入(include/extend)是基础。 - 类变量和实例变量的区别,以及`class 语法来改变当前类的上下文也是重要的知识点。 5. **异常处理**: - `begin...rescue...end`结构用于捕获...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    `include`和`extend`关键字分别用于实例方法和类方法的混入。 6. **常量、变量和符号**:Ruby的常量、局部变量和符号在运行时也可以被查询和修改,尽管常量的修改可能会导致警告。 7. **Closures和Proc对象**:...

    Programming-Ruby-1.9源代码

    - 源代码中会展示如何使用`include`和`extend`关键字引入模块。 4. **异常处理** - `begin-rescue-end`结构用于处理程序运行时可能出现的错误,源代码会演示如何捕获和处理异常。 5. **集合操作** - 集合操作如...

    Ruby 中的 module_function 和 extend self异同

    在Ruby编程语言中,`module_function`和`extend self`都是与模块(module)相关的特性,它们用于控制方法的可见性和行为。理解这两者的异同对于编写清晰、可维护的代码至关重要。 首先,我们来看`module_function`...

    Ruby In a Nutshell

    - 使用`include`将模块的成员导入到类中,`extend`将模块的方法添加到对象实例上。 6. **异常处理** - `begin-rescue-end`用于捕获和处理异常。 - `raise`用于引发异常,`ensure`确保在任何情况下执行的代码。 ...

    Ruby 方法、类

    模块通过`module`关键字定义,使用`include`或`extend`导入到其他类或对象中: ```ruby module MathOperations def add(a, b) a + b end end class Calculator include MathOperations end calc = Calculator...

    ruby开发文档

    5. **模块和混合**:模块是命名空间的容器,用于组织类和方法,还可以通过`include`或`extend`实现代码复用和混入。 6. **数据结构**:Ruby提供了丰富的内置数据结构,如数组(Array)和哈希(Hash)。数组是有序的...

    Ruby语言教程和经典案例

    ### Ruby语言教程和经典案例详解 #### Ruby语言基础语法教程 **1. 变量和数据类型** 在Ruby中,变量声明相对灵活,通常无需显式地使用`var`关键字,可以直接通过赋值来声明变量。例如: ```ruby name = "Alice" ...

    ruby使用文档

    - 模块用于代码组织和命名空间隔离,可以使用`include`、`extend`引入模块功能。 5. **继承与多态**: - Ruby支持单继承,但通过模块混入可以实现多重继承的效果。 - 多态性通过方法重写和消息转发实现。 6. **...

    ruby经典

    10. **模块与命名空间**:模块用于组织代码,提供命名空间,防止命名冲突,并可通过`include`或`extend`引入模块的方法。 通过阅读"Ruby经典"这本书,读者将逐步了解并掌握以上知识点,从而在Ruby编程世界中...

    元编程 Ruby

    3. 模块混入:Ruby中的模块可以被包含(include)到类中,这在本质上是把模块中的方法和类混合,从而增强类的功能。这里涉及到的还有模块的内联扩展。 4. 代码块(Blocks)、迭代器(Iterators)和Procs:它们是...

    ruby语法

    7. **模块(Module)**: 模块用于封装代码,提供命名空间,并可以通过`include`或`extend`引入到类中。 8. **异常处理**: Ruby使用`begin..rescue..else..ensure`来处理异常。例如: ```ruby begin # 可能会抛出...

    Ruby中文参考手册

    10. **模块混合**:Ruby的模块可以被类“混入”(include或extend),实现跨类的代码共享。 11. **类和对象初始化**:Ruby中通过initialize方法初始化对象,而Class.new可以用来创建新的类。 12. **Ruby on Rails*...

    Ruby语言相关项目的示例

    - 引入模块使用`include`或`extend`,`include`使模块的方法成为包含它的类的实例方法,`extend`则将其变为类方法。 3. **类与继承** - Ruby中的类可以通过`运算符来继承其他类,实现多态。 - `super`关键字用于...

    Ruby语言入门教程(附源码文件)

    通过`include`或`extend`关键字,一个类可以使用模块中的方法。 6. **异常处理** 使用`begin/rescue/ensure/else`块处理程序中的错误。Ruby提供了多种内置异常类,如`StandardError`、`RuntimeError`等。 7. **...

Global site tag (gtag.js) - Google Analytics