`
太平洋1986
  • 浏览: 21001 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby的include和extend

阅读更多
在ruby中基本上有三种引入module的方式
一、在类定义中引入module后,module中的方法成为类的实例方法。
        在类定义中用include引入module。
       例如:
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。
        例如:
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。
       例如:
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笔记2ruby笔记2ruby笔记2

    Ruby支持单继承,但可以通过模块混入(`include`和`extend`)实现多重功能继承。 5. **常量与符号**:常量在Ruby中以大写字母开头,全局可见;符号是不可变的引用,常用于哈希键和方法调用。 6. **数组与哈希**:...

    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笔记3ruby笔记3ruby笔记3

    模块通过`module`关键字定义,可以使用`include`或`extend`关键字将其包含到类中。 控制结构包括条件语句(如`if`、`unless`、`case`)和循环(如`for`、`while`、`until`、`each`)。Ruby还提供了块(block)和 ...

    ruby使用文档

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

    ruby经典

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

    元编程 Ruby

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

    ruby初学笔记ruby初学笔记

    通过`include`或`extend`关键字,模块可以被其他类或对象使用。 8. **常量(Constants)**:以大写字母开头的标识符被视为常量,一旦赋值后,其值不应改变,尽管Ruby不强制执行这一规则。 9. **类方法和单例方法...

    ruby语法

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

Global site tag (gtag.js) - Google Analytics