Ruby self在不同环境的含义

而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义
一、Top Level Context
Ruby代码
puts self
打印出main,这个代表Object的默认对象main.
二、在class或module的定义中:
在class和module的定义中,self代表这个class或这module对象:
Ruby代码
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
输出结果:
写道
>ruby self1.rb
Just started class S
Nested module S::M
S::M
Back in the outer level of S
>Exit code: 0
三、在实例的方法定义中:
这点和java的this代表的东东一样:程序自动传递的调用这个方法的对象
Java代码
class S
def m
puts 'Class S method m:'
puts self
end
end
s = S.new
s.m
运行结果:
写道
>ruby self2.rb
Class S method m:
#<S:0x2835908>
>Exit code: 0
四、在单例方法或者类方法中:
单例方法是针对一个对象添加的方法,只有这个对象拥有和访问这个方法,这时候self是拥有这个方法的对象:
Ruby代码
# self3.rb
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
运行结果:
写道
ruby self3.rb
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>
>Exit code: 0
在类方法中self代表这个类对象:
Ruby代码
# self4.rb
class S
def S.x
puts "Class method of class S"
puts self
end
end
S.x
运行结果:
写道
>ruby self4.rb
Class method of class S
>Exit code: 0
从上面的例子我们可以看出不管是ruby的self还是java的this都表示在当前的环境下你可以访问的当前的或者默认的对象。

(0)

相关推荐

  • CentOS中配置Ruby on Rails环境

    详细安装步骤: 一.更新Python centos 中默认安装的python是2.4的版本,因为新版的rails需要提供nodejs的相关支持,需要更新python,更新文章可以直接移步到这个链接 http://www.tomtalk.net/wiki/Python 复制代码 代码如下: yum install -y bzip2*           #nodejs 0.8.5需要,请安装python前,先安装此模块.   wget http://www.python.org/ftp/pytho

  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    1.阿里云的一键安装web全环境 下载一键安装web全环境 sh.zip 压缩包 上传至服务器,解压.执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_nginx_xxx.sh $ ./install_mysql_xxx.sh 2.安装RVM与指定的

  • Ruby self在不同环境的含义

    而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义 一.Top Level Context Ruby代码 puts self 打印出main,这个代表Object的默认对象main. 二.在class或module的定义中: 在class和module的定义中,self代表这个class或这module对象: Ruby代码 class S puts 'Just started

  • C++ 中的类型详细

    目录 一.初始化与赋值 二. 类型概述 三.类型分类 1.数值类型 2.void类型 四.字面值及其类型 五.变量及其类型 六.复合类型 1.指针:一种间接类型: 2.引用 七.常量类型 八.类型别名 九.类型自动推导 十.域与对象声明周期 1.思考下下面关于指针的两行代码的含义 2.经过指针的思考后,我们看看关于引用的思考 3.经过了指针和引用的思考 4.思考以下代码中&x是什么数据类型? 5.思考下面函数传参的区别? 6.下面常量表示底层常量还是顶层常量? 7.下面auto&自动推导出

  • 详解Ruby中的单件方法和单件类

    单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = "just a regular string" def str.title? self.upcase == self end str.title? # => false str.methods.grep(/title?/) # => [:title?] str.singleton_methods #=> [:title?] str.class # => S

  • 解析 ruby 全局变量

    全局变量由$开头.它们可以在程序的任何位置访问到.在初始化前,全局变量有一个特殊的值 nil. ruby> $foo    nil ruby> $foo = 5    5 ruby> $foo    5 应谨慎使用全局变量.由于在任何地方都可以被写因此他们相当危险.滥用全局变量会导致很难隔离臭虫;同时也视为程序的设计未经严格考虑.当你发现必须要使用全局变量时,记得给它一个不会在其它地方一不小心就用到的描述性名字(像上面那样叫$foo可能不是一个好想法). 全局变量的好处是其可以被跟踪;你

  • Ruby中操作字符串的一些基本方法

    在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: 'Won\'t you read O\'Reilly\'s book?' 反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符. 以下是字

  • 借助RubyGnome2库进行GTK下的Ruby GUI编程的基本方法

    前言 随着RubyGnome2库越来越完善,以及ruby1.9的性能提升,用Ruby编写GUI程序渐渐从我的业余爱好转为我工作的一个重要部分.   用Ruby写程序确实很有乐趣,它可以让你的想法快速地以一种优雅的方式实现.本文介绍的一个gem就是一个例子,用很少的代码,实现很有趣的功能,让编写Ruby GUI程序变得轻松愉快.   RubyGnome2介绍   虽然我以前也曾经多次地介绍过RubyGnome2,但我还是想再一次地推荐RubyGnome2,它实在是使用Ruby编写GUI程序的首选.

  • 详细解析Ruby中的变量

    变量持有要使用的程序的数据的存储位置. Ruby支持的有五种类型的变量.在前面的章节中已经经历了一个简短描述以及这些变量.本章中介绍的这五种类型的变量. Ruby的全局变量: 全局变量以$开头.未初始化的全局变量的值是零,并使用-w选项产生警告. 全局变量的赋值会改变全局状态.这是不推荐使用全局变量.他们使得程序的含义模糊. 下面是一个例子显示使用全局变量. #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global p

  • ruby基本数据类型简明介绍

    概括.ruby中的基本数据类型都是类类型,只不过为了书写和阅读的方便,为基本数据类型提供了较为简洁的书写方式而已. 一.数值类型 整数支持二进制,八进制,十进制,十六进制,根据整数的大小动态决定整数是Fixnum类型还是Bignum类型. 浮点数支持科学计数法,小数点后至少有一个数字. 数值类型继承图如下: 复制代码 代码如下: Numeric  |--Integer      |--Fixnum          |--Bignum  |--Float  |--Complex(标准库)  |-

  • 优化Ruby脚本效率实例分享

    profile.rb是为Ruby程序准备的profiler,它可以统计并输出各方法的运行时间,以便于找到程序执行的性能瓶颈.这次就用它来剖析脚本的运行时间.使用方法很简单,加上命令行选项-r profile就可以: ruby -r profile rename.rb 运行结束后,会把统计信息输出到标准错误输出中.如下图所示: profile统计的是各方法的运行时间,分为2类.第1种计算的是从方法调用到方法返回之间的时间,称为整体时间:第2种则是从整体时间中扣除在该方法中调用其它方法所耗费时间之后

  • Ruby中编写类与模块的风格指南

    在 class 定义里使用一致的结构. class Person # extend and include go first extend SomeModule include AnotherModule # constants are next SOME_CONSTANT = 20 # afterwards we have attribute macros attr_reader :name # followed by other macros (if any) validates :name

随机推荐