Ruby使用include和extend来对class做补充。
假设有一个module:
module Person def about_me puts "This is about me." end end
1, include <module name>
1.1 使模块的方法变成类的实例方法:
class Student include Person end student = Student.new student.about_me # puts "This is about me." Student.about_me # 没有定义此方法,抛出异常。
1.2 如何要让 Student 可以直接调用include module的方法,可以在 def self.included(c) ... end 实现,比如
module Person def about_me puts "This is about me." end def self.included(c) def c.call_me puts "This is class me" end end end
Student.call_me即可直接调用。
2, extend <module name>是直接变成类的类方法 ,相当于class << self.
参考资料: http://www.railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby
相关推荐
总的来说,`include`和`extend`是Ruby on Rails中模块化编程的重要工具,它们分别用于添加实例方法和类方法,而`self.included`回调可以让我们在`include`模块时自定义类的行为,比如同时添加实例方法和类方法。...
在Ruby的世界里,模块是一种强大的工具,用于将方法和常量封装在一个命名空间内,从而实现代码的复用和组织。Ruby提供了两种方式来集成模块的功能:`include` 和 `extend`。 ##### `include` 关键字 `include` ...
这种方式使得多个类可以通过包含同一个模块来共享相同的实例方法和类变量。 **示例代码**: ```ruby module Test @a = 1 def class_type "This class is of type: #{self.class}" end end class TestClass ...
了解如何创建自定义类,继承和模块混入(include/extend)是基础。 - 类变量和实例变量的区别,以及`class 语法来改变当前类的上下文也是重要的知识点。 5. **异常处理**: - `begin...rescue...end`结构用于捕获...
在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...
`include`和`extend`关键字分别用于实例方法和类方法的混入。 6. **常量、变量和符号**:Ruby的常量、局部变量和符号在运行时也可以被查询和修改,尽管常量的修改可能会导致警告。 7. **Closures和Proc对象**:...
- 源代码中会展示如何使用`include`和`extend`关键字引入模块。 4. **异常处理** - `begin-rescue-end`结构用于处理程序运行时可能出现的错误,源代码会演示如何捕获和处理异常。 5. **集合操作** - 集合操作如...
- 模块用于代码组织和命名空间隔离,可以使用`include`、`extend`引入模块功能。 5. **继承与多态**: - Ruby支持单继承,但通过模块混入可以实现多重继承的效果。 - 多态性通过方法重写和消息转发实现。 6. **...
- 使用`include`将模块的成员导入到类中,`extend`将模块的方法添加到对象实例上。 6. **异常处理** - `begin-rescue-end`用于捕获和处理异常。 - `raise`用于引发异常,`ensure`确保在任何情况下执行的代码。 ...
在Ruby中,模块是一个用于封装方法和常量的结构。当一个模块被`include`到一个类中时,模块中的方法(不包括被`module_function`标记的方法)将成为类的实例方法。这些实例方法需要类实例化后才能被调用。然而,如果...
5. **模块和混合**:模块是命名空间的容器,用于组织类和方法,还可以通过`include`或`extend`实现代码复用和混入。 6. **数据结构**:Ruby提供了丰富的内置数据结构,如数组(Array)和哈希(Hash)。数组是有序的...
2. **动态性**:Ruby是高度动态的语言,变量类型在运行时确定,允许动态修改方法和属性,这使得代码更灵活,但也可能导致一些运行时错误,需要谨慎处理。 3. **块、迭代器与闭包**:Ruby中的块(block)是一种特殊...
- **访问控制**:虽然Ruby默认不强制访问控制,但可以通过`public`、`protected`、`private`等关键字实现对方法和变量的访问控制。 **5. 模块(Module)** 模块是Ruby中的另一个重要概念,主要用于组织代码和提供...
3. 模块混入:Ruby中的模块可以被包含(include)到类中,这在本质上是把模块中的方法和类混合,从而增强类的功能。这里涉及到的还有模块的内联扩展。 4. 代码块(Blocks)、迭代器(Iterators)和Procs:它们是...
- 引入模块使用`include`或`extend`,`include`使模块的方法成为包含它的类的实例方法,`extend`则将其变为类方法。 3. **类与继承** - Ruby中的类可以通过`运算符来继承其他类,实现多态。 - `super`关键字用于...
7. **模块(Module)**: 模块用于封装代码,提供命名空间,并可以通过`include`或`extend`引入到类中。 8. **异常处理**: Ruby使用`begin..rescue..else..ensure`来处理异常。例如: ```ruby begin # 可能会抛出...
10. **模块混合**:Ruby的模块可以被类“混入”(include或extend),实现跨类的代码共享。 11. **类和对象初始化**:Ruby中通过initialize方法初始化对象,而Class.new可以用来创建新的类。 12. **Ruby on Rails*...
通过`include`或`extend`关键字,一个类可以使用模块中的方法。 6. **异常处理** 使用`begin/rescue/ensure/else`块处理程序中的错误。Ruby提供了多种内置异常类,如`StandardError`、`RuntimeError`等。 7. **...
每个变量都可视为对象,具有方法和属性。类是创建对象的模板,而实例化一个类就是创建一个对象。类可以包含属性(也称为实例变量)和方法,方法用于操作和访问这些属性。Ruby支持单继承,但通过模块实现多重继承的...