ruby语言里的self理解
关键的一句话:关键看谁调用self,self就属于谁
有3种情况:
1、在class或module的定义中,self代表这个class或者这个module对象,代码如下:
class S
puts 'Just started class S'
puts self
module M
puts 'Nested module S::M'
puts self
end
puts 'Back in the outer level of S'
puts self
end
输出结果:
Just started class S
S
Nested module S::M
S::M
Back in the outer level of S
S
2、在实例方法中,self代表调用方法的对象,对象实际上是内存里的一块内存空间,例如:
class S
def m
puts 'Class S method m:'
puts self
end
end
s = S.new
s.m
输出结果如下:
Class S method m:
#<S:0x2bc0a10>
3、在单例方法中,是为一个对象设置的函数,所以此时的self代表的是拥有这个方法对象,例如:
obj = Object.new
def obj.show
print 'I am an object: '
puts "here's self inside a singleton method of mine:"
puts self
end
obj.show
print 'And inspecting obj from outside, '
puts "to be sure it's the same object:"
puts obj
其中,Object是最大的一个类,不需要再定义了,所以这里就省略了class部分对Object的定义。
输出结果为:
I am an object: here's self inside a singleton method of mine:
#<Object:0x2835688> #这里就是对象所占的内存地址
And inspecting obj from outside, to be sure it's the same object:
#<Object:0x2835688>
4、在类方法中,self代表的是类本身
class S
def S.x
puts "Class method of class S"
puts self
end
end
S.x
运行结果如下:
Class method of class S
S
ruby语言里的self理解的更多相关文章
- ruby语言是什么东西
1.简介 Ruby是日本的Yukihiro Matsumoto写的,简单易学的面向对象的脚本语言,像perl一样,有丰富的文字处理.系统管理等丰富 功能,但是ruby要简单,容易理解和扩充.跟p ...
- 《Ruby语言入门教程v1.0》学习笔记-02
9.18 第四章 一切都是对象 这个章节的例子都举得很浅显易懂,而且作者的语言= =噗,委实生动有趣啊是~~ 4.1 两种思维方式 初期的编程思想是:以“如何做”为指导来编写代码.这时期的编程语言叫 ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- [No000011]Ruby之attr_reader,attr_writer,attr_accessor理解&用法
(Ruby/Python/Perl) Ruby 语言与Python和Perl的一个很大区别,在于Ruby中,所有的实例变量都是在类中完全私有的,只能通过accessor 方法来进行变量访问,引用一段代 ...
- c语言里用结构体和指针函数实现面向对象思想
一.基础研究 观察如下两个程序a.c和b.c: A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性 ...
- ruby语言仅仅是昙花一现
Ruby语言本身存在非常久了,在国内一直没火过.非常多人仅仅是知道有这样的语言,会的人少之又少.不论什么一种语言坚持十来年的发展,变得越来越好,一定有它不平常的地方.不能任意的去比較语言本身的好与坏. ...
- const分别在C和C++语言里的含义和实现机制
const的含义 简单地说:const在c语言中表示只读的变量,而在c++语言中表示常量. C语言 const是constant的缩写,是恒定不变的意思,也翻译为常量,但是很多人都认为被 ...
- [原创]C语言里为何会有“2+2=5”的结果
原文链接:C语言里为何会有“2+2=5”的结果 写这篇原创文章是因为看到了极客中的一篇文章<有趣各种编程语言实现2+2=5>,其中C语言是这样实现的: int main() { ″; // ...
- [2014年学习计划之RoR系列] 第二步 – 熟悉Ruby语言 (2/n) Blocks and Iterators (代码块和迭代器)
[就算没有含金量,也请尊重原创, 转载自我的独立博客http://brucejia.net] Blocks and Iterators (代码块和迭代器) 代码块和迭代器是Ruby语言中比较有特点的东 ...
随机推荐
- 【Leetcode】【Medium】Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- Session跨域、Session共享、Mode=StateSever方式解决问题
前言 很多童鞋在工作或面试的过程中,也许会遇到这样的问题,使用Session,怎样让多个站点实现Session共享的问题,也就是在A站点登录,那么在B站点就不需要重新登录了那?如果采用Session保 ...
- Toad for MySQL 7.3 Freeware异常 2017-01-09 15:14 115人阅读 评论(0) 收藏
打开Toad出现如下异常信息: 解决办法: 重装.NET Framework4.0
- gdb可视化工具gdbgui
gdbgui是一款很强大的gdb可视化工具,基于浏览器调试很方便.后台是python写的,目前使用起来还有些bug,不过已经很满足了. 官网 https://gdbgui.com Github htt ...
- UVa 12716 - GCD XOR(筛法 + 找规律)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- tp5.0和tp3.2中前台模板IF标签和FOREACH的区别
IF标签 tp3.2 <if condition="($name eq 1) OR ($name gt 100) "> value1 <elseif condit ...
- web.xml的加载过程是context-param >> listener >> fileter >> servlet
web.xml的加载过程是context-param >> listener >> fileter >> servlet
- Telnet配置
一.环境 路由 IP:192.168.56.2 本地云 IP:192.168.56.1 二.认证模式 AAA模式 认证 授权 计费的安全技术 当配置用户界面的认证方式为AAA时, 用户登录设备时需要首 ...
- 【题解】洛谷P1311 [NOIP2011TG] 选择客栈(递推)
题目来源:洛谷P1311 思路 纯暴力明显过不了这道题 所以我们要考虑如何优化到至多只能到nlogn 但是我们发现可以更优到O(n) 我们假设我们当前寻找的是第二个人住的客栈i 那么第一个人住的客栈肯 ...
- qt+vs2005新建配置不自动加载Generated Files进工程(个人备份)
工程右键Qt Project Settings 的Moc Directory路径删除 确定,再进入将删除路径加上