`
biyeah
  • 浏览: 202901 次
  • 来自: ...
社区版块
存档分类
最新评论

[转]ruby的include与extend

    博客分类:
  • Ruby
 
阅读更多
原文http://www.cnblogs.com/rubylouvre/archive/2010/03/31/1701813.html
作者:司徒正美

ruby提供了强大的继承机制,有关继承的方法很多。最简单就是“<<”,但还可以对要继承的东西进行细分,是把它添加到类中呢,还是实例中,这正是本文要介绍的内容。
module Foo
  def foo
    puts 'heyyyyoooo!'
  end
end
 
class Bar
  include Foo
end
 
Bar.new.foo # heyyyyoooo!
Bar.foo # NoMethodError: undefined method ‘foo’ for Bar:Class
 
class Baz
  extend Foo
end
 
Baz.foo # heyyyyoooo!
Baz.new.foo # NoMethodError: undefined method ‘foo’ for #<baz:0x1e708>
</baz:0x1e708>

我们可以看到通过包含(include),为目标类添加一些实例方法。而扩展则恰恰相反,为目标类添加相应的类方法。虽然同是一个模块,但方法的不同,会产生不同的效果。
分享到:
评论

相关推荐

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

    ### 模块的力量:Ruby中include与extend的深度解析 #### Ruby语言简介 Ruby是一种高级、面向对象的编程语言,自1995年由日本开发者松本行弘(Yukihiro "Matz" Matsumoto)创建以来,一直受到广泛的欢迎。它的设计...

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

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

    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`关键字定义,使用`include`或`extend`导入到其他类或对象中: ```ruby module MathOperations def add(a, b) a + b end end class Calculator include MathOperations end calc = Calculator...

    ruby使用文档

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

    Ruby In a Nutshell

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

    ruby开发文档

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

    ruby经典

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

    ruby语法

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

    Ruby 中的 module_function 和 extend self异同

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

    元编程 Ruby

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

    ruby语法自整理

    - 模块(Module)用于封装功能,可以使用`include`将模块的方法添加到类的实例方法中,使用`extend`将模块的方法添加到类本身(类方法)。 - `load`用于加载文件,如果已经加载过,不会再次加载。 8. `case`语句 ...

    ruby初级中文教程与实例

    模块之间可以通过`include`或`extend`进行混入,实现代码复用。 2. 命名空间:模块可以作为命名空间,避免命名冲突。 四、异常处理 Ruby使用`begin/rescue/else/ensure`结构处理异常。`rescue`捕获特定类型的错误...

    Ruby中文参考手册

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

    Ruby语言相关项目的示例

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

Global site tag (gtag.js) - Google Analytics