`
老王
  • 浏览: 8257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ruby中的Mixin

阅读更多
在Ruby中,我们可以把一个模块混入(Mixin)到对象中,从而达到类似多重继承的效果。

下面举几个例子来仔细阐述一下这个问题:

首先定义一个Module:

module Foo
  def bar
    puts "foo";
  end
end


然后我们把这个模块混入到对象中去:

class Demo
  include Foo
end


如上编码后,模块中的实例方法就会被混入到对象中:

d=Demo.new
d.bar


会输出foo字样。

下面我们重新定义一下Demo类:

class Demo
  extend Foo
end


这个时候如果你得到的就是静态调用:

Demo.bar

会输出foo字样。

下面我们再来重新定义一下Demo类:

class Demo
  def bar
    puts "demo"
  end
end


然后使用extend方法调用:

d=Demo.new
d.extend(Foo)
d.bar


会输出foo字样。

下面我们再来重新定义一下Demo类:

class Demo
  include Foo
 
  def bar
    puts "demo"
  end
end


然后使用extend方法调用:

d=Demo.new
d.extend(Foo)
d.bar


会输出demo字样。

其中的味道,自己慢慢体会吧。
分享到:
评论
1 楼 ray_linn 2009-06-20  
class Demo
{
  public void Foo(){
   ....
  }
}

static class Bar
{

  public static void Bar(this Demo demo)
  {
    .....
   }
}

同样可以做到Demo.Bar()调用,这种东西不是静态动态的分界线

相关推荐

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

    在学习Ruby的过程中,你还需要了解一些工具,如Ruby的解释器irb(交互式Ruby环境)和ri/rdoc(Ruby文档工具),它们有助于调试和理解代码。版本管理工具如RVM(Ruby Version Manager)和rbenv可以帮助你管理多个Ruby...

    modernizr-mixin, 在Sass中,针对测试的简单而全面的mixin.zip

    modernizr-mixin, 在Sass中,针对测试的简单而全面的mixin hardwarebutton混合 一种简单的DRYier测试方法,在Sass中更快更。安装要求 ruby 3.4或者 LibSass 3.2Libsass警告:在 Libsass 3.2.3中有一个已知 Bug,它...

    ruby(前途大好的ruby+rains)

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

    mixin_bot:Ruby中用于Mixin网络的简单API包装器

    gem 'mixin_bot' 或者 gem install mixin_bot 用法 初始化参数 要使用MixinBot api,您应该先设置密钥。 MixinBot . client_id = '25696f85-b7b4-4509-8c3f-2684a8fc4a2a' MixinBot . client_secret = 'd9dc58107...

    ruby 中文文档 入门必学

    3. **块、迭代器和闭包**:Ruby中的块(Block)和迭代器是其强大的特性之一,常用于遍历数据结构。闭包(Closure)即lambda或Proc,是能够记住其定义时环境的代码块。 4. **元编程**:Ruby允许在运行时修改自身,这...

    游戏脚本语言(ruby初步)

    Ruby的特点包括:动态类型、垃圾回收、闭包、块、Mixin等。 Ruby语言的名称来源于红宝石(Ruby),它是第四种宝石,symbolize着富有生命力和激情的红色,而 ruby语言也正是如此,它具有生命力和激情,是一种活泼...

    Ruby语言中文教程

    - Mixin特性:模块可以作为混入(mixin),将模块的方法添加到类中,实现代码复用。 4. **块、迭代器与 Proc/Lambda** - 块:Ruby中的块是代码段,通常用在循环或方法调用中,用花括号{}或do..end包围。 - Proc...

    ruby中文文档 chm版

    Ruby中的类和对象是实现这一特性的基础。 在Ruby中,万物皆对象,包括基本的数据类型如整数、字符串和布尔值。每个对象都有自己的属性(实例变量)和行为(方法)。类是创建对象的蓝图,定义了对象的属性和方法。...

    重构--Ruby 完整扫描清晰版--中文

    在Ruby中进行重构,需要开发者熟悉其语言特性,比如动态类型、块(block)、混入(mixin)等,以便更加高效地改进代码。 文档中出现的大量重复链接“更多资源请访问稀酷客(***)”可能是某种出版商或者版权信息的...

    Ruby中文文档.rar

    - 方法:Ruby中的方法可以接收可变数量的参数,也可以使用块(block)进行处理。 - 控制结构:包括条件语句(如`if`、`unless`)、循环(如`for`、`while`、`until`、`each`)和异常处理(如`begin`、`rescue`、`...

    ruby ebook

    4. **模块**:Ruby的模块用于实现命名空间、混合-in(mixin)机制,帮助实现代码的复用和组织。 5. **元编程**:Ruby强大的元编程能力允许在运行时修改或创建代码,这是Ruby区别于其他语言的一大特色。 6. **标准...

    Ruby 基础

    Ruby还支持模块(Module),用于实现命名空间、封装和混合(mixin)功能。 Ruby的异常处理机制允许程序员捕获和处理运行时错误。`begin..rescue..end`结构用于定义异常处理块,`raise`用于抛出异常。 在资源管理...

    Ruby语言中文教程.rar

    Ruby的类定义可以通过模块进行组织,模块可以提供命名空间和混合(mixin)功能,让类能够继承多个模块的行为。 Ruby的动态性体现在其运行时类型检查和变量绑定。这意味着你在编写代码时不必提前声明变量的类型,...

    ruby.rar

    类定义了对象的行为,而模块则提供了命名空间和混合(mixin)功能,可以将行为插入到多个类中。 Ruby还拥有丰富的标准库,包括文件操作、网络通信、日期和时间处理等,这些都通过简单的API供开发者使用。此外,Ruby...

    ruby入门到精通

    5. **块、proc和lambda**:Ruby中的块、Proc对象和Lambda用于定义和传递代码片段,它们在函数式编程和回调中扮演重要角色。 6. **模块**:模块用于组织代码,提供命名空间,支持混入(mixin)功能,允许类吸收其他...

    《Ruby用户指南》中文版

    Ruby的面向对象特性非常突出,类、对象、继承、模块和 Mixin 是其核心组成部分。理解这些概念对于编写高效、可维护的代码至关重要。例如,Ruby中的万物皆对象,每个变量实际上都是一个指向对象的引用,而类则用于...

Global site tag (gtag.js) - Google Analytics