`
gift5168xf
  • 浏览: 28978 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby中extend Mod

    博客分类:
  • ROR
阅读更多
    在ruby中一切皆对象就不用多说了,对象的方法是通过对象中的指针klass指向一个其他类,这个对象的方法就定义在这个类中。如果一个类是Object的子类,那么这个类所有实例化出的对象的方法都定义在这个类上,这些对象的klass指针也指向这个类。
    就ruby中的一个对象角度看,如果为它定义个一方法(既只有他自己才有的方法),这个对象就会创建一个虚类—metaclass,所以定义在这个对象上的方法都会建立在这个对象的klass指针指向的类上(metaclass)。
    言归正传,object.extend Mod 这样这个对象就会拥有模块中的实例方法,在上端已经阐明了,为对象构造自己的方法都会放在虚类中,所以扩展了的实例方法被放在了它的metaclass中。ok,说到这肯定大家想起了class << object中定义的方法,没错这样定义的方法与extend是没有区别的,他们都要为对象创建他们的metaclass。
    因此平时我们见过的如果在一个类中这样引用一个模块
   

class AClass
  extend AMod
end


    这里要解释下extend AMod实际是self.extend AMod,这样定义大家都知道实际是把引用了的模块的实例方法作为了这个类的类方法,原理同上,实际是为self即这个类对象本身增加他自己的方法--这就是所谓的类方法了。
分享到:
评论

相关推荐

    模块的力量: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中文教程(源代码)

    - 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...

    Ruby中文参考手册

    2. **控制结构**:Ruby中的流程控制有if/else、case、while/until循环、for循环以及块(Proc和Lambda)的使用,这些都是编写逻辑代码的关键部分。 3. **面向对象**:Ruby是面向对象的,每个值都是一个对象。它支持...

    Java中extend与implement区别.doc

    Java 中 extend 与 implement 的区别 Java 语言中,extend 和 implement 是两个基本概念,它们之间的区别是非常重要的。extend 用于继承类,而 implement 用于实现接口。在 Java 中,不支持多重继承,但是可以使用...

    解析UML用例图中include与extend的区别

    解析 UML 用例图中 include 与 extend 的区别 UML 用例图是软件开发过程中的一种重要工具,它能够帮助我们更好地理解和描述业务需求。在 UML 用例图中,有两种重要的关系:include 和 extend。这两种关系都是用来...

    ruby中文文档.rar

    在Ruby中,你可以学习到以下关键概念: 1. **面向对象编程**:Ruby是一种纯面向对象的语言,意味着每一个实体都是一个对象,包括基本的数据类型。它支持类的创建、继承、封装和多态性。 2. **动态类型**:Ruby不需...

    Ruby 方法、类

    在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...

    Ruby语言中文教程

    在Ruby中,语言的核心特性之一是它的动态性。这意味着变量的类型在运行时确定,允许程序员进行灵活的编程。例如,同一变量可以在不同时间存储字符串、整数或数组,无需预先声明类型。这极大地提高了开发效率。 Ruby...

    com.guo.android_extend:android-extend:1.0.6

    通过将这个 `.aar` 文件添加到 Android 项目的 `libs` 目录,并在项目的构建配置中引用,开发者就可以使用其中提供的功能,而不必直接依赖于 'com.guo.android_extend:android-extend:1.0.6'。 在这个特定的场景下...

    ruby中文文档 初学者入门

    6. **块、Proc和Lambda**:Ruby中的块是代码块,可以作为参数传递给方法,Proc和Lambda是两种可调用的对象,它们可以捕获上下文,类似于函数。 7. **数组和哈希**:数组是有序的元素集合,可以通过索引访问;哈希是...

    Ruby 中的 module_function 和 extend self异同

    在Ruby中,模块是一个用于封装方法和常量的结构。当一个模块被`include`到一个类中时,模块中的方法(不包括被`module_function`标记的方法)将成为类的实例方法。这些实例方法需要类实例化后才能被调用。然而,如果...

    Ruby中文教程。。。

    1. 变量:Ruby中的变量分为局部变量、实例变量、类变量和全局变量,它们有不同的标识符和作用范围。例如,`$global`代表全局变量,`@instance`是实例变量,`@@class`为类变量,而`local_var`是局部变量。 2. 数据...

    ruby trap 初学者使用

    - 常量在Ruby中是可变的,但改变常量值会引发警告,初学者应避免随意修改。 2. **符号(Symbol)**: - 符号是Ruby中的一种特殊数据类型,它们是不可变的,常用于哈希键和方法调用。理解符号与字符串的区别对于...

    元编程 Ruby

    Ruby中的每个类都拥有一个对应的元类(也称为eigenclass或singleton class),这是实现元编程的关键结构,因为元类允许我们在运行时给类动态地添加方法和属性。 Ruby的元编程能力在Rails框架中得到了广泛的应用。...

Global site tag (gtag.js) - Google Analytics