文档章节

Ruby中关于模块的知识

穿山
 穿山
发布于 2017/11/15 16:36
字数 360
阅读 3
收藏 0
class Point
  attr_accessor :x, :y
  def initialize(x, y)
    @x = x
    @y = y
  end
end
# 1 Module是不能实例化的
# 2 Module中既可以有实例方法也可以有类方法
module Helper
  def self.plus(obj)
    print obj.x + obj.y
  end

  def min(obj)
    print obj.x - obj.y
  end
end

p = Point.new(3, 4)

# 3 模块中的类方法直接通过模块调用即可,并且类方法无法被mixin
Helper.plus(p)

# 4 使用include将模块的实例方法mix进来 当实例方法使用
# 5 使用extend将模块的实例方法mix进来 当类方法使用
class Point
  include Helper
  extend Helper
end

Point.min(p)

p.min(p)

# 6 如果想同时mix 类方法和实例方法
module Helper2
  # instance method
  def plus(obj)
    print obj.x + obj.y
  end

  # class method
  module ClassMethod
    def min(obj)
      print obj.x - obj.y
    end
  end

  # 只要当前这个module被include某个class中 这个方法就会被调用
  # 将ClassMethod下的方法 mix成 类方法
  def self.included(klass)
    klass.extend ClassMethod
  end
end

class Point2
  attr_accessor :x, :y
  include Helper2
  def initialize(x, y)
    @x, @y = x, y
  end
end

p = Point2.new(8, 4)

Point2.min(p)

p.plus(p)

# 7 查看该类的模块
p Point2.included_modules
# 8 判断是否是该模块
p Point2.include?(Helper2)
# 9 查看所有的祖先 其中包括模块
p Point.ancestors
# 10 去除其中的模块部分
p Point.ancestors - Point.included_modules
# 11 产看Point所属类 所属类为Class Class也是类
p Point.class
# 12 模块属于Module类
p Helper2.class
# Class类的父类是模块 所有Class的父类都是module
p Point.class.superclass

 

© 著作权归作者所有

穿山
粉丝 9
博文 33
码字总数 18655
作品 0
南京
私信 提问
Clojure:让我兴奋的编程语言

最近我一直有想写一点关于Clojure的东西的冲动。但不巧的是,还有一个更大的冲动经常出现,就是要用Clojure语言重写我的这个博客网站,这也就让这篇文章的出炉延迟了一段时间。那么,下面就让...

oschina
2014/05/22
21.5K
23
这些魔幻的Ruby特性,了解一下?

内容主要来自于《七天七语言》和《Ruby Programming》。 一、Ruby核心思想 Bruce有一段非常精彩的话,来形容Ruby: Ruby是崇尚自由精神的语言,允许做几乎一切事情,包括修改NilClass或Strin...

大大枣
2018/05/16
19
0
在ruby语言中,Kernel模块的print是私有的,为什么可以随处调用?

《ruby元编程》,在ruby语言,可以在任何代码位置中调用print(),而print()是Kernel模块的私有方法:Kernel.private_instance_methods.grep(/^pr/)#=>[:printf,:print,:proc].而Object类包含...

败给你了
2014/10/10
143
1
一款针对WordPress网站的渗透测试框架

  今天给大家介绍的是一款名叫Wordpress Exploit Framework的Ruby框架,研究人员可利用该框架来研发或使用其自带某开来对由WordPress驱动的网站或系统进行渗透测试。       工具运行条...

FreeBuf
2018/06/26
0
0
Node.js与Ruby on Rails 谁最适合Web开发?

  【IT168 资讯】本文将介绍并比较Node.js和Ruby on Rails在Web技术方面的一些优点和缺点。      先看看两种技术的一些相同之处。   * 受欢迎的服务器端技术   * 容易学习   * 高...

it168网站
2017/11/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
26分钟前
2
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
28分钟前
2
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
31分钟前
2
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
36分钟前
2
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部