ModuleRuby一个非常好用的功能,它跟Class类别非常相似,你可以在里面定义方法。只是你不能用new来建立它。它的第一个用途是可以当做Namespace来放一些工具方法:

  1. module MyUtil
  2. def self.foobar
  3. puts "foobar"
  4. end
  5. end
  6. MyUtil.foobar # 输出 foobar

另一个更重要的功能是Mixins,可以将一个Module混入类別之中,这样这个类別就会拥有此Module的方法。这回让我们拆成两个wenji,debug.rbfoobar.rb,然後在foobar.rb中用引用debug.rb

首先是debug.rb:

  1. module Debug
  2. def who_am_i?
  3. puts "#{self.class.name}: #{self.inspect}"
  4. end
  5. end

然后是foobar.rb:

  1. require "./debug"
  2. class Foo
  3. include Debug # 這個動作叫做 Mixin
  4. end
  5. class Bar
  6. include Debug
  7. end
  8. a = Foo.new
  9. b = Bar.new
  10. a.who_am_i? # 輸出 Foo: #<Foo:0x00000102829170>
  11. b.who_am_i? # 輸出 Bar: #<Bar:0x00000102825b88>

       Ruby使用Module来解決多重继承的问题,不同类别之间只要拥有相同的方法,就可以改放在Module里面,然后include它即可。

Java中的interface可以解决多重继承的缺陷,C++是支持多重继承的,而且有一个元友的概念。我认为ruby的include module更像C++的friend class的功能。

转载于:https://blog.51cto.com/sanqianyuejia/1131218

ruby的module与Java的interface以及C++的friend相关推荐

  1. Java注释@interface的用法

    2019独角兽企业重金招聘Python工程师标准>>> java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. @O ...

  2. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

  3. Java Native Interface 六JNI中的异常

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...

  4. 【转】JNI(Java Native Interface)的简介

    因为刚刚接触android和java平台,对JNI到底是什么,还不是很了解,所以从CSDN转载了一篇文章,以便自己对JNI有一个认识,也跟大家分享一下. JNI是Java Native Interfa ...

  5. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  6. Java注释@interface的用法【转】

    Java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. @Override,@Deprecated,@SuppressWarnings ...

  7. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  8. Android JNI(Java Native Interface)技术介绍

    Android平台上的JNI技术介绍 JUL 15TH, 2013 | COMMENTS NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最 ...

  9. Ruby,Python和Java中的Web服务

    今天,我不得不准备一些示例来说明Web服务是可互操作的. 因此,我已经使用Metro使用Java创建了一个简单的Web服务,并在Tomcat上启动了它. 然后尝试使用Python和Ruby消耗它们. ...

最新文章

  1. Java集合详解之Map
  2. BZOJ1042 [HAOI2008]硬币购物
  3. 多通道图像的通道分享和合成函数-split、merge
  4. html制作花样链接卡页面_使用HTML5实现刮刮卡效果
  5. 百度视频携手神策数据,引领基于 AI 的短视频推荐技术新潮流
  6. 【windows8开发】C++开发WinRT组件和JS调用
  7. hdu2115: I Love This Game
  8. 1123. Is It a Complete AVL Tree (30)
  9. 使用ODAC调用ORACLE的自定义函数和存储过程
  10. mysql 实现计数器_MySQL实现计数器的表设计及实现
  11. C#性能优化篇 - 基于索引器封装EPList
  12. 文件系统与linux相关知识点
  13. hive优化--增加减少map数
  14. 60版FireFox无法在win7虚拟机上安装
  15. MySQL保存历史执行语句
  16. 2022大众点评商家数据
  17. 线性代数之 矩阵乘法的本质
  18. python 删除文件夹中相似图片
  19. linux 默认网关自动消失,route add default gw 添加默认网关,重起后消失
  20. 类似于talkingdata的灵动功能的实现

热门文章

  1. 华为为什么能成全球第一?告诉你三个真相!
  2. Snapchat何以在Facebook包围下“杀出重围”?
  3. 取得Linux系统的各种统计信息
  4. spark-1.5.2集群安装
  5. android高效加载网络图片
  6. Android开发者必须深入学习的10个应用开源项目
  7. EIGRP的路由汇总与认证
  8. 多线路虚拟主机解决方案
  9. 汇编 debug调试
  10. 一份超级全面的PHP面试题