几种Ruby self应用方法介绍

Ruby语言通常被人们理解为是一种解释型脚本语言。在对Ruby语言的学习中,我们需要不断的从编码实践中去总结经验,帮助我们提高编程能力。

Ruby self在不同的环境中有不同的含义,这点和java的this不同,原因是java实际上只有一种环境--在class的实例方法定义中使用,代表访问这个方法参数自动传进的那个对象。

而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以Ruby self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义。

一、Top Level Context

puts self

打印出main,这个代表Object的默认对象main.

二、在class或module的定义中:

在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  

输出结果:

>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代表的东东一样:程序自动传递的调用这个方法的对象

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  

四、在单例方法或者类方法中:

单例Ruby self方法是针对一个对象添加的方法,只有这个对象拥有和访问这个方法,这时候self是拥有这个方法的对象:

# 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  

在类方法中Ruby self代表这个类对象:

# self4.rb   


class S   


def S.x   


puts "Class method 
of class S"   


puts self   


end   


end   


S.x  

运行结果:

相关推荐