ruby模块与类
Class类是Module的子类,类是一种特殊形式的模块, Class, Module, Object,Kernel的关系。
我们知道最顶级的类是Object,那么最顶级的模块就是Kernel
我们使用模块的的主要目的是用来组织代码,模块化代码,有点类似命名空间,但却有很大的不同。
一、创建和使用模块
用module关键字来定义模块
module FirstModule
def say
puts "hello"
end
end
module没有实例,我们使用时把module混合到类中来使用,我们也可以这么理解,把Module里的内容拷贝一份放到类里,成为类的一部分。
module FirstModule
def say
puts "hello"
end
end
class ModuleTest
include FirstModule
end
test=ModuleTest.new
test.say
#hello
我们可以把模块放到一个单独的文件里,然后使用时进行加载,看下面的示例,假设我们有一个project.rb的文件,包含了Project模块
module Project
attr_accessor :member
def initialize
@member=Array.new
end
def add(name)
member.push(name)
end
def del
member.pop
end
end
require "project"
class Manager
include Project
end
manager=Manager.new
manager.add("tom");
manager.add("lili");
#tom
注意: 在使用require或load时,请求加载的内容放到引号里,而inclue不是用引号,这是因为require或load使用字符串做为参数,而include使用常量形式的模块名,require和load使用字符串变量也可以.
二、混合进模块的类的方法查找
module A
def say
puts "hello"
end
end
class B
include A
end
class C <B
end
test =C.new
test.say
上面say方法查找路径为 C类-->C类里包含的模块-->B类-->B类包含的模块......>Object-->Kernel,当找到第一个时,搜索停止。
同名方法的查找,后面覆盖前面的.
module A
def say
puts "hello from A"
end
end
module B
def say
puts "hello from B"
end
end
class C
include A
include B
end
test =C.new
test.say
#output: hello from B
super提升查找路径(调用查找路径上下一个匹配的方法),同样我们使用super可以调用父类的同名方法,initialize是自动执行
module A
def say
puts "hello from A"
end
end
class B
include A
def say
puts "in say from B"
super
puts "out say from B"
end
end
test =B.new
test.say
# in say from B
#hello from A
#out say from B
三、模块和类可以相互嵌套
module也可以包含类,但调用时需要这样使用 模块名::类名.new
module A
class B
def say
puts "hello"
end
end
end
test =A::B.new
test.say
分享到:
相关推荐
在Ruby中,方法和类是构建程序的基本元素,它们是实现代码重用和组织的关键概念。 ### 方法(Methods) 方法在Ruby中是可重复使用的代码块,它们接受参数,执行特定任务,并可能返回值。方法定义使用`def`关键字...
在Ruby编程语言中,`module_function`和`extend self`都是与模块(module)相关的特性,它们用于控制方法的可见性和行为。理解这两者的异同对于编写清晰、可维护的代码至关重要。 首先,我们来看`module_function`...
另外,Ruby中的模块(Module)和Java的包(Package)相似,但模块还扮演着命名空间和混入(Mix-in)的角色。混入允许模块中的方法被其他类直接继承和使用,这是一种不同于Java继承的独特方式。 在错误处理方面,...
2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...
### Ruby面向对象编程中类的方法与类的扩展 在Ruby这门动态的、面向对象的脚本语言中,类和方法扮演着极其重要的角色。本文将深入探讨Ruby中类的方法以及类的扩展,并通过示例代码帮助理解这些概念。 #### 类方法 ...
模块中的方法定义与类方法相似,但需要加上`self.`前缀以明确表示它是模块级别的方法。 **示例代码**: ```ruby module Trig PI = 3.141592654 def self.sin(x) # ... end end ``` #### 六、require 语句 `...
6. **模块(Module)**:Ruby的模块用于实现命名空间,代码重用和混合(mixin)功能。一个类可以包含多个模块,实现多重继承的效果。 7. **异常处理**:Ruby提供了异常处理机制,通过`begin..rescue..end`结构捕获...
9. **元编程增强**:Ruby的元编程能力进一步提升,如`Module#define_method`和`Module#module_function`等方法的改进,使得在运行时修改类和模块的行为更加灵活。 10. **错误处理**:错误处理机制得到了改进,新的...
你可以定义方法,创建继承结构,使用模块(module)来实现代码复用和类别混合(mixin),以及利用元编程能力动态地修改类的行为。Ruby的块(block)、 Proc 和 Lambda 是实现回调和高阶函数的关键。 元编程是Ruby的...
Ruby还支持模块(Module),可以用来组织代码和实现多继承的效果。此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] ...
此外,Ruby还支持模块(Module),它们可以包含方法和常量,且可以被多个类混合(Mix-in)以扩展功能。 总之,"ruby程序设计"涵盖了从Ruby语言基础到高级特性的全面讲解,包括Ruby的历史、特性,环境配置,类与对象...
4. **反射API**:Ruby提供了一系列的反射API,如`Class#methods`,`Module#constants`,`ObjectSpace`等,这些工具允许我们检查和操作对象、类和模块的内部状态。 5. **模块混入**:模块可以被混入到类中,提供代码...
在Ruby中,几乎所有的类都是开放的,这意味着可以在任何地方添加新的方法到一个已存在的类上。 **示例**: ```ruby class String def reverse_words words = self.split(' ') reversed_words = words.map(&:...
Ruby还支持模块(Module),它是组织代码的一种方式,可以包含常量、类方法和实例方法。模块可以被混入(include)到类中,实现代码的复用。这对于创建类之间的关系,尤其是横向关系非常有用。 Ruby的块(Block)和...
5. **元编程**:Ruby的元编程能力强大,通过反射API(如`Module#define_method`、`class_eval`等)可以在运行时修改类和对象的行为。这使得Ruby非常适合创建自定义DSL(领域特定语言)。 6. **标准库**:Ruby的标准...
- 动态:Ruby具有高度的动态性,允许在运行时修改类和对象。 - 垃圾回收:内置垃圾回收机制,自动管理内存,简化开发者的工作。 - 组合性:通过模块(module)实现代码的复用和封装,支持多继承。 - 充实的标准库:...
- **Class与Module**:Ruby使用`module`来组织代码,类似于.NET的命名空间,但其实现机制有所不同,为代码结构提供了更多可能性。 - **Gem包管理**:Ruby通过`gem`命令来管理第三方插件,使得安装、更新和卸载扩展库...
Ruby的模块(Module)和类(Class)系统使得代码组织和复用变得简单。模块可以用来封装相关的函数和常量,避免命名冲突,类则是面向对象编程的基础,通过继承和多态,可以构建复杂的应用架构。 最后,Ruby的Gem生态...
- 类(Class)与实例(Instance)的概念。 - 继承(Inheritance)与多态(Polymorphism)。 - Ruby的元编程特性,如模块(Module)和混入(Mixins)等。 3. **Ruby基础语法** - 变量和数据类型:整数、浮点数、字符串、数组...
2. 模块(Module):用于封装相关的方法和常量,可以被其他类包含。 3. 方法(Method):定义在类或模块上的操作。 4. 对象(Object):Ruby 中的一切都是对象,每个对象都有自己的类。 5. 面向对象特性:包括继承...