文档章节

一步一步学Ruby(五): Class, Module, Object,Kernel的关系

ThinkGem
 ThinkGem
发布于 2016/07/17 16:09
字数 333
阅读 12
收藏 0

1. Class, Module, Object,Kernel的关系

我们看到Ruby里,可以直接写puts, print等,感觉像是命令动词一样,这和我们说的Ruby里一切都是对象有点冲突,其实我们理解了Ruby中Class, Module,Object,Kernel的关系,就明白了,通过下面的代码,我们知道Module是Class的父类.

image

image

  • 通过上图可以看出Class, Module, Object 都是class,而Kernel是Module。
  • Object是Ruby中所有类的父类,Object混入了Kernel这个模块,所以Kernel中内建的核心函数就可以被Ruby中所有的类和对象访问。
  • Object的实例方法由Kernel模块定义。

2. Kernel

我们可以把Kernel理解为系统预定义的一些方法,我们可以在所有的对象上使用,使用时不需要使用类型作为前缀,当然我们也可以加上Kernel,看起来像C#的静态方法。

image

Kernel模块中定义了private method和public method,我们可以在irb里输入Kernel.methods, Kernel.public_methods, Kernel.private_methods.

对于一个普通的对象,可以直接调用Kernel的public method

而要想调用一个普通对象所包含的Kernel的函数,用一般的调用方法无法做到,只有通过Send来实现.

 

本文作者:王德水

本文转载自:http://yc75.iteye.com/blog/379921

ThinkGem

ThinkGem

粉丝 1269
博文 142
码字总数 31335
作品 2
济南
架构师
私信 提问
在ruby语言中,Kernel模块的print是私有的,为什么可以随处调用?

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

败给你了
2014/10/10
142
1
一步一步学Linq to sql基础系列(一到十)

一步一步学Linq to sql(一):预备知识 http://www.cnblogs.com/aehyok/archive/2013/04/11/3015506.html 一步一步学Linq to sql(二):DataContext与实体 http://www.cnblogs.com/aehyok/arch......

aehyok
2013/04/24
0
0
Ruby缺失的define_class

Ruby默认提供了等工具用于动态定义实例方法,但貌似没提供动态定义类的方法。 所谓动态定义类,不是指动态创建类,而是指类名是用字符串或符号动态给定的。看完《Ruby元编程》后,我尝试着自...

redraiment
2014/02/20
170
1
Ruby 模块(Mix-in)

是 Ruby的特色功能之一. 如果说类表现的是实物的实体(数据)及其行为(处理), 那么模块表现的就只是事物的行为部分. 模块与类有以下两点不同: 模块不能拥有实例 模块不能被继承 利用 Mix-in 扩...

changsanjiang
2017/10/23
0
0
Ruby语法简要

这两天有空学习下Ruby,以下简单记录Ruby的一些关键信息。 基本语法 ==、equal? == 比较两个变量的值是否相等;equal?比较的是内存地址。和Java刚好相反。 if if...endif...elsif...endif......

gangzz
2016/01/05
46
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
4
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部