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里面.
分享到:
- 2009-09-22 10:59
- 浏览 822
- 评论(0)
- 论坛回复 / 浏览 (0 / 1379)
- 查看更多
相关推荐
掌握预处理指令#include的用法对于一个程序员来说是基础且重要的一部分,因为它关系到代码的组织和管理。在实际开发中,合理运用#include指令可以提高开发效率,减少代码冗余,使得代码更加清晰和易于维护。
Qt工程的几种编译方法 Qt 是一个功能强大且灵活的跨平台应用程序开发框架,它提供了多种编译方法,以满足不同的开发需求。本文将介绍几种常见的 Qt 工程编译方法,并通过示例代码进行说明。 法一:使用 .pro 文件...
当JSP页面被请求时,服务器会先读取该指令,并将指定的文件内容合并到当前JSP页面中,然后将整个合并后的文件作为一个整体进行编译。这意味着被包含的文件在编译阶段就成为主文件的一部分,之后每次请求该JSP页面时...
在实际的项目结构中,可能包含以下几种模块类型: - **主应用模块**(App Module):包含应用的基本配置,例如启动Activity、全局设置等。 - **功能模块**(Feature Module):如用户登录、购物车、新闻列表等,...
在深入探讨如何编译第一个Linux内核模块hello.ko.txt之前,我们首先应当明确几个关键概念:Linux内核模块、Makefile以及相关的编程语言和工具。Linux内核模块是能够被动态加载到运行中的内核的独立代码块,用于扩展...
它们的作用主要是让程序变得清晰和可以被重用,在其他程序里,用 INCLUDE 语句可以把一个包含程序加到程序里。最终的效果相当于用被包含的程序里的全部内容替换调 INCLUDE 语句。包含程序类型为 I。 子程序 ...
Qt串口模块提供了几个核心类用于实现串行通信的功能: 1. **`QSerialPort`**:这是Qt串口模块中最主要的类,提供了串口设备的访问接口,包括打开、关闭串口以及读写数据等基本操作。 2. **`QSerialPortInfo`**:...
常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了...
参见 http://blog.csdn.net/xcl168 Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 方法都收集到了一起。它们各有利弊,有各自己的应用场景。 我现在把它们集中到...
然而,这个“tiff图像读取模块”特别指出它没有使用GDAL,而是使用了其他方法来实现TIFF图像的读取。 C++中读取TIFF图像的关键步骤包括: 1. **库的引入**:首先,你需要包含一个支持TIFF格式的库,如libtiff。...
模块化编程则是将一个大型项目分解为多个独立的、可重用的模块,每个模块都有明确的功能和职责。在单片机编程中,这通常意味着将复杂任务分解为若干个简单函数,每个函数负责一项具体工作。这样做有以下几个优点:一...
OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机视觉算法,广泛应用于机器学习、图像识别、自动驾驶等领域。在本压缩包"OpenCV_lib_include_dll.rar"中,我们可以看到它...
一个简单的内核模块通常包含以下几个部分: 1. **模块头信息**:每个内核模块都必须定义`MODULE_LICENSE`、`MODULE_AUTHOR`、`MODULE_DESCRIPTION`等宏,用于提供版权信息、作者信息以及模块的简短描述。 2. **...
除了`include`,ASP.NET还提供了其他几种代码分离的方法,例如: 1. **程序集(.dll)**:将代码编译成IL代码的DLL文件,可以在多个项目中引用。 2. **<inherits src>.cs**:定义一个继承自`Page`类的新类,并在ASPX...
【自助建站模块】是一种基于JavaServer Pages(JSP)技术的网站开发工具,它旨在简化网站构建过程,使得没有专业编程背景的用户也能通过预设的组件和模板,自行搭建功能丰富的网站。这种模块化的建站方式极大地降低...
一个典型的超声波测距模块包括以下几个主要部分: 1. 超声波发射器:通常由压电陶瓷材料制成,能够将电信号转化为超声波信号。 2. 超声波接收器:同样基于压电效应,将接收到的超声波信号转换回电信号。 3. 控制...
Qt是一个功能强大的跨平台应用程序开发框架,广泛应用于桌面、移动和嵌入式系统。QtXmlPatterns是Qt的一个组件,它提供了对XML数据进行查询和操作的能力,类似于XSLT和XPath,但具有更面向对象的API。 首先,让我们...
这些链表是双向循环链表,每个链表节点包含两个指针,分别指向前一个节点和后一个节点。节点结构通常定义为: ```c struct list_head { struct list_head *next, *prev; }; ``` 为了方便操作,Linux内核提供了...
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 虽然结构化程序设计方法具有很多的优点,...
4. **setup.py**:这是一个Python脚本,使用`setuptools`库来编译和构建C扩展模块。它会定义`Extension`对象,指定源文件和编译选项,然后调用`setup()`函数来执行构建过程。 **四、具体实现步骤** 1. **编写C代码...