欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ruby self在不同环境的含义

程序员文章站 2022-04-09 20:39:53
而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的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都表示在当前的环境下你可以访问的当前的或者默认的对象。