`
CharlesCui
  • 浏览: 416500 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

让一个类include一个模块的几种方法

阅读更多
module Test
  module ClassMethods
    def test_class
      p 'this is a class method'
    end
  end
  
  module InstanceMethods
    def test_ins
      p 'this is a instance method'
    end
    
    def method_missing
      self
    end
  end
  
  # def self.included(receiver)
  #   receiver.extend         ClassMethods
  #   receiver.send :include, InstanceMethods
  # end
end

=begin rdoc
  Add instance methods
=end

# String.class_eval("include Test::InstanceMethods")
# 's'.test_ins # => "this is a instance method"

# String.send :include,Test::InstanceMethods
# 's'.test_ins # => "this is a instance method"

=begin rdoc
  Add class methods
=end

# class << String;include Test::ClassMethods;end
# String.test_class # => "this is a class method"

# String.extend Test::ClassMethods
# String.test_class # => "this is a class method"


从上面的代码可以看出:

class_eval和send :include,Module是一个作用,
都是将一个模块变成self类的实例方法.

class <<和extend是一个作用,
都可以将一个模块变成self的类方法,都把Module的方法塞进了sefl类的metaclass里面.
分享到:
评论

相关推荐

    常用跨域共用session的是登录模块

    常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了...

    Android参数传递方法汇总

    参见 http://blog.csdn.net/xcl168 Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 方法都收集到了一起。它们各有利弊,有各自己的应用场景。 我现在把它们集中到...

    超级有影响力霸气的Java面试题大全文档

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)...

    详解Python import方法引入模块的实例

    在Python用import或者from…import或者from…import…as…来导入相应的模块,作用和使用方法与C语言的include头文件类似。其实就是引入某些成熟的函数库和成熟的方法,避免重复造轮子,提高开发速度。 python的...

    java面试题

    答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件是一种特殊的委托。 应用程序域? 答:应用程序域可以理解为一种轻量级的进程,起到安全的作用,占用资源小。 Class.forName作用? 答:调用该访问返回...

    java 面试题 总结

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)的...

    语言程序设计课后习题答案

    结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 虽然结构化程序设计方法具有很多的优点,...

    Python调用C++程序的方法详解

    这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导出成Python接口的几种基本方法,一起来学习学习吧。...

    net学习笔记及其他代码应用

    委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,...

    ABAP面试大全

    2.2.2 ABAP透明表有哪几种数据类(data class)?对数据的存储有什么影响? 10 2.2.3 SAP中有几种表,他们的区别是什么? 10 2.2.4什么是簇表(cluster table)?举出知道的簇表。 10 2.2.5找数据库表,有哪些常用的...

    C 程序指导书及实践指导

    2、 讨论参数的传递的几种形式。 实验八 数组(1) [实验目的] 掌握有关数组和字符串的程序设计方法。 [实验内容和步骤] 1 已知一组数据如下: 6,3,42,23,35,71,98,67,56,38 编写程序,把它们按从小到大的...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    // 噢,忘了教长吧,让我们添加一个元素 $myphonebook&#91;"dean"&#93; = "5397"; // 你定义的carale元素错了,让我们更正它 $myphonebook&#91;"carole"&#93; =&gt; "4522" // 我还没有告诉你怎样使用数组的相似支持...

    代码语法错误分析工具pclint8.0

    用类似的方法可以配置对一个SourceInsight工程文件的lint检查。 (a)打开你的SourceInsight, 选择Options--&gt;Custom Commands--&gt;Add, 输入pclint_project(当然名字可以随便). (b) Run中输入: C:\unix\usr\local\wbin...

    C#微软培训资料

    第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...

    C语言标准教程第一章 C语言概论

    预处理命令还有其它几种,这里的include 称为文件包含命令,其意义是把尖括号""或引号内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h。因此也称为头文件或首部文件...

    Java开发技术大全 电子版

    1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 ...

    c语言课程设计学生成绩管理系统.docx

    要求:(1) 一个文件按以班为单位储备同学记录.(2) 将答应的操作分为四种, 以 A,B ,C,D,E,F为标志 :A: 插入一个同学记录B: 修改同学记录 ; C:删除一个同学记录 D:查找一个同学记录 E: 浏览同学成果 :F: 退出;;;3.运算...

    php网络开发完全手册

    5.2 创建一个简单类 71 5.3 PHP5与PHP4的差异 72 5.4 定义属性和方法 72 5.4.1 属性与方法的定义 72 5.4.2 传统的构造函数 73 5.4.3 PHP类中的一些特殊方法 74 5.5 类的引用、扩展与继承 75 5.5.1 类的引用 75 5.5.2...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

Global site tag (gtag.js) - Google Analytics