`
老王
  • 浏览: 8169 次
  • 性别: 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()调用,这种东西不是静态动态的分界线

相关推荐

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

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

    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-destroyed_at, 用于安全销毁的ActiveRecord Mixin.zip

    ruby-destroyed_at, 用于安全销毁的ActiveRecord Mixin DestroyedAt 查找帮助?如果是一个 Bug ,请在GitHub上打开一个问题。安装将 destroyed_at gem 添加到 Gemfilegem 'destroyed_at'你可以在每个模块中

    dry-configurable, 一个简单的mixin使 ruby 类可以配置.zip

    dry-configurable, 一个简单的mixin使 ruby 类可以配置 干可以配置 概要class App extend Dry::Configurable # Pass a block for nested configuration (works to any

    modernizr-mixin:用于Sass中Modernizr测试的简单而全面的mixin

    LIBSASS警告:Libsass 3.2.3至3.2.5中存在一个已知的错误,该错误使Modernizr mixin输出错误的选择器。 在下一个Libsass版本中修复该错误之前,唯一的解决方法是坚持使用Libsass 3.2.2。 更多信息: : 有四种...

    ruby语法基础教程

    §13.3.7 Ruby中YAML的使用 99 第十四章 安全控制 100 §14.1 0级 101 §14.1 1级 101 §14.2 2级 101 §14.3 3级 101 §14.4 4级 101 第十五章 单元测试 101 §15.1 什么是单元测试 101 §15.2 Ruby单元测试框架 ...

    验证:Ruby对象的验证mixin

    安装将此行添加到您的应用程序的Gemfile中: gem 'hanami-validations' 然后执行: $ bundle 或自己安装为: $ gem install hanami-validations用法Hanami::Validations是一个混合对象,一旦包含在对象中,就会为其...

    rgl:RGL是用于Ruby中图形数据结构和算法的框架

    Ruby图形库(RGL) RGL是用于图形数据结构和算法的框架。... 在Ruby中,可以使用其他技术来主要使用mixin和迭代器来表达算法和数据结构的通用特征。 BGL文档提到了三种实现通用性的方法: 算法/数据结

    limiter:简单的Ruby速率限制机制

    这个gem实现了一种简单的机制来限制或限制Ruby中的操作。 安装 将此行添加到您的应用程序的Gemfile中: gem 'ruby-limiter' 然后执行: $ bundle 或将其自己安装为: $ gem install ruby-limiter 用法 基本...

    chunky_png:在纯Ruby中对PNG图像的读写访问

    矮胖PNG 该库可以读取和写入PNG文件。 它是用纯Ruby编写的,以实现最大的可移植性。 我再说一遍:它不需要RMagick或任何其他内存泄漏图像库。... 另外,请查看 ,它是一个mixin模块,该模块在C语言中实现了一些Ch

    jsonity:在 Ruby 中构建 JSON 的最性感语言

    在 Ruby 中构建 JSON 的最性感语言 我一直在用 、 和编写 JSON API,但它们都不能满足我的要求和用例。 jbuilder语法很冗长,partial和mixin的功能其实很弱 RABL 语法简单,但是用它写复杂的数据结构可读性不强 ...

    awesome_print:用样式漂亮地打印您的Ruby对象-全彩和适当的缩进

    Rails ActiveRecord对象和Rails模板中的用法通过随附的mixin支持。 注意:awesome_print v1.9.0可能不适用于Ruby 2.4或更早版本或Rails 4.2或更早版本。 即将发布的awesome_print v2.0将需要Ruby v1.9.3或更高版本...

    mvc, ruby EXTJS 工具.zip

    mvc, ruby EXTJS 工具 mvc帮助器,MVC mixin和 PORs ( plain-old-ruby-object ),帮助自动生成 EXTJS 存储,包括它的关联的DataReader ( ext.data. jsonreader,Ext.data. Xm

    awesome_print, 在全彩色和适当的缩进,漂亮的打印你的ruby 对象.zip

    awesome_print, 在全彩色和适当的缩进,漂亮的打印你的ruby 对象 的出色打印 Awesome Print是一个 ruby 库,它可以在完整颜色中打印 ruby 对象,以适当的缩进显示它的内部结构。 Rails 对象和 Rails 模板中的用法...

    gun:ruby 启发了对 javascript 的 mixin 支持,并带有一点元编程

    枪.js ruby 启发了对 javascript 的mixin支持,并带有一点元编程。 非常干净,小而锋利的api。 如果你更喜欢(像我一样)组合而不是继承范式,你应该试一试。 文档将在稍后(可能)跟进。

    book-of-ruby:来自《Ruby 之书》一书的源代码

    这是《Ruby 之书》一书中的源代码。 第 1 章:字符串、数字、类和对象 第 2 章:类层次结构、属性和类变量 第 3 章:字符串和范围 第 4 章:数组和哈希 第 5 章:循环和迭代器 第 6 章:条件语句 第 7 章:方法 第 ...

    value_struct:Ruby 中的只读结构

    它有一个主要区别: 值结构是不可变的,即它们没有设置器(尽管不是递归*) 此外,这个 gem 提供了以下可选的 mixin,使使用不可变结构时的生活更轻松: :dup_with_changes扩展#dup以采用可选的哈希值来设置副本中的...

    mincer-ruby-sass:Mincer SassScss 引擎,使用官方 Ruby Sass 引擎

    在我们自己的本地测试中,我们发现@import ed 文件在直接访问/编译时经常失败,因为 mixin 和变量不可用。 为了允许直接访问这些文件,有一个setShowRawOutput方法来定义一个自定义谓词来确定是否显示原始输出与...

    amazing_print:用样式漂亮地打印您的Ruby对象-全彩和适当的缩进

    Rails ActiveRecord对象和Rails模板中的用法通过随附的mixin支持。支持的版本Ruby> = 2.3 导轨> = 5.1安装# Installing as Ruby gem$ gem install amazing_print# Cloning the repository$ git clone git://github....

Global site tag (gtag.js) - Google Analytics