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

ruby 的module 与类

    博客分类:
  • java
 
阅读更多
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 方法、类

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

    Ruby 中的 module_function 和 extend self异同

    在Ruby编程语言中,`module_function`和`extend self`都是与模块(module)相关的特性,它们用于控制方法的可见性和行为。理解这两者的异同对于编写清晰、可维护的代码至关重要。 首先,我们来看`module_function`...

    From Java to Ruby

    另外,Ruby中的模块(Module)和Java的包(Package)相似,但模块还扮演着命名空间和混入(Mix-in)的角色。混入允许模块中的方法被其他类直接继承和使用,这是一种不同于Java继承的独特方式。 在错误处理方面,...

    Ruby元编程第二版中文

    2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来动态创建类和模块。`class_eval`和`module_eval`允许在类或模块上下文中执行字符串或块作为代码。 3. **对象的反射**:`Object#methods`、`Class#...

    Ruby面向对象编程中类的方法与类的扩展

    ### Ruby面向对象编程中类的方法与类的扩展 在Ruby这门动态的、面向对象的脚本语言中,类和方法扮演着极其重要的角色。本文将深入探讨Ruby中类的方法以及类的扩展,并通过示例代码帮助理解这些概念。 #### 类方法 ...

    08Ruby 模块.docx

    模块中的方法定义与类方法相似,但需要加上`self.`前缀以明确表示它是模块级别的方法。 **示例代码**: ```ruby module Trig PI = 3.141592654 def self.sin(x) # ... end end ``` #### 六、require 语句 `...

    ruby(前途大好的ruby+rains)

    6. **模块(Module)**:Ruby的模块用于实现命名空间,代码重用和混合(mixin)功能。一个类可以包含多个模块,实现多重继承的效果。 7. **异常处理**:Ruby提供了异常处理机制,通过`begin..rescue..end`结构捕获...

    ruby2.1.6安装文件

    9. **元编程增强**:Ruby的元编程能力进一步提升,如`Module#define_method`和`Module#module_function`等方法的改进,使得在运行时修改类和模块的行为更加灵活。 10. **错误处理**:错误处理机制得到了改进,新的...

    ruby中文教程,从基础到深入的让你学习ruby

    你可以定义方法,创建继承结构,使用模块(module)来实现代码复用和类别混合(mixin),以及利用元编程能力动态地修改类的行为。Ruby的块(block)、 Proc 和 Lambda 是实现回调和高阶函数的关键。 元编程是Ruby的...

    Ruby入门教程中文PDF 附实例

    Ruby还支持模块(Module),可以用来组织代码和实现多继承的效果。此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] ...

    ruby程序设计

    此外,Ruby还支持模块(Module),它们可以包含方法和常量,且可以被多个类混合(Mix-in)以扩展功能。 总之,"ruby程序设计"涵盖了从Ruby语言基础到高级特性的全面讲解,包括Ruby的历史、特性,环境配置,类与对象...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    4. **反射API**:Ruby提供了一系列的反射API,如`Class#methods`,`Module#constants`,`ObjectSpace`等,这些工具允许我们检查和操作对象、类和模块的内部状态。 5. **模块混入**:模块可以被混入到类中,提供代码...

    ruby metaprograming

    在Ruby中,几乎所有的类都是开放的,这意味着可以在任何地方添加新的方法到一个已存在的类上。 **示例**: ```ruby class String def reverse_words words = self.split(' ') reversed_words = words.map(&:...

    Ruby语言入门教程

    Ruby还支持模块(Module),它是组织代码的一种方式,可以包含常量、类方法和实例方法。模块可以被混入(include)到类中,实现代码的复用。这对于创建类之间的关系,尤其是横向关系非常有用。 Ruby的块(Block)和...

    Programming Ruby

    5. **元编程**:Ruby的元编程能力强大,通过反射API(如`Module#define_method`、`class_eval`等)可以在运行时修改类和对象的行为。这使得Ruby非常适合创建自定义DSL(领域特定语言)。 6. **标准库**:Ruby的标准...

    ruby1.8.6-26

    - 动态:Ruby具有高度的动态性,允许在运行时修改类和对象。 - 垃圾回收:内置垃圾回收机制,自动管理内存,简化开发者的工作。 - 组合性:通过模块(module)实现代码的复用和封装,支持多继承。 - 充实的标准库:...

    .一步一步学RUBY

    - **Class与Module**:Ruby使用`module`来组织代码,类似于.NET的命名空间,但其实现机制有所不同,为代码结构提供了更多可能性。 - **Gem包管理**:Ruby通过`gem`命令来管理第三方插件,使得安装、更新和卸载扩展库...

    ruby实用函数和实例

    Ruby的模块(Module)和类(Class)系统使得代码组织和复用变得简单。模块可以用来封装相关的函数和常量,避免命名冲突,类则是面向对象编程的基础,通过继承和多态,可以构建复杂的应用架构。 最后,Ruby的Gem生态...

    eloquent ruby

    - 类(Class)与实例(Instance)的概念。 - 继承(Inheritance)与多态(Polymorphism)。 - Ruby的元编程特性,如模块(Module)和混入(Mixins)等。 3. **Ruby基础语法** - 变量和数据类型:整数、浮点数、字符串、数组...

    ruby api html

    2. 模块(Module):用于封装相关的方法和常量,可以被其他类包含。 3. 方法(Method):定义在类或模块上的操作。 4. 对象(Object):Ruby 中的一切都是对象,每个对象都有自己的类。 5. 面向对象特性:包括继承...

Global site tag (gtag.js) - Google Analytics