Ruby self在不同环境的含义_ruby专题

而由于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都表示在当前的环境下你可以访问的当前的或者默认的对象。

时间: 2024-08-02 07:41:33

Ruby self在不同环境的含义_ruby专题的相关文章

在Docker中自动化部署Ruby on Rails的教程_ruby专题

基本的Rails应用程序 现在让我们启动一个基本的Rails应用.为了更好的展示,我使用Ruby 2.2.0和Rails 4.1.1 在终端运行: $ rvm use 2.2.0 $ rails new && cd docker-test 创建一个基本的控制器: $ rails g controller welcome index --,然后编辑 routes.rb ,以便让该项目的根指向我们新创建的welcome#index方法: root 'welcome#index' 在终端运行 r

深入理解Ruby中的block概念_ruby专题

Ruby 里的 block一般翻译成代码块,block 刚开始看上去有点奇怪,因为很多语言里面没有这样的东西.事实上它还不错.First-class function and Higher-order function First-class function 和 Higher-order function 是函数式编程语言里面的概念,听起来好像很高端的样子,其实很很简单的. First-class functions 是指在某些语言里,函数是一等公民,可以把函数当做参数传递, 可以返回一个函数

优化Ruby脚本效率实例分享_ruby专题

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

ruby基本数据类型简明介绍_ruby专题

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

win7安装ruby on rails开发环境_ruby专题

前言 看到很多文章都说ruby环境在windows上是非常难搭建,会出现各种各样的怪问题,所以都推荐到linux和mac上安装开发.但是我按照教程搭了下,问题也不算太多.总过大概花费了2个半小时左右就完成了.所以大家不要被吓尿了,下面就把安装的步骤及具体的版本记录了一下供大家参考. 安装步骤:    开发机环境:我使用的开发机:win7 旗舰版 - 64位 (cpu是i5). 1 安装 rubyinstaller-2.0.0-p481.exe    1 选择安装目录:(如:D:\server\R

Ruby多线程编程初步入门_ruby专题

 传统程序有一个单独的线程执行,包含该程序的语句或指令顺序执行直到程序终止. 一个多线程的程序有多个线程的执行.在每个线程是按顺序执行的,但是在多核CPU机器上线程可能并行地执行.例如,通常情况下在单一CPU的机器,多个线程实际上不是并行执行的,而是模拟并行交叉的线程的执行. Ruby的可以使用 Thread 类很容易地编写多线程程序. Ruby线程是一个轻量级的和高效的在代码中实现并行性.创建Ruby线程: 要启动一个新线程,关联一个块通过调用Thread.new.将创建一个新的线程执行的代码

详解Ruby中的方法概念_ruby专题

 Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def met

详解Ruby当中的算数运算_ruby专题

 Ruby支持一系列丰富的运算符的一个现代化的语言.大多数运算符实际上是方法调用.例如,a + b的被解释为a, +(b)变量引用的对象的方法被称为一个用b作为它的参数. 对于每个运算符 (+ - * / % ** & | ^ << >> && ||), 有相应的赋值运算符缩写形式 (+= -= 等)Ruby算术运算符: 假设变量a=10,变量b=20:  Ruby比较操作符: 假设变量a=10,变量b=20:  Ruby赋值运算符: 假设变量a=10,变量

ruby 一些简单的例子_ruby专题

现在我们将前面的一些示例程序的代码坼开来分析一下. 下面的例子出现在简单的例子一节. def fact(n)       if n == 0            1       else            n * fact(n-1)       end end print fact(ARGV[0].to_i), "\n"   因为是第一次解释,我们将逐行分析. def fact(n)  第一行,def 用于定义一个函数(或者,更准确地说,一个方法(method);我们会在稍后的一