Ruby self在不同环境的含义
程序员文章站
2022-07-05 12:11:52
而由于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都表示在当前的环境下你可以访问的当前的或者默认的对象。
一、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都表示在当前的环境下你可以访问的当前的或者默认的对象。
上一篇: nodejs中各种加密算法的实现详解
下一篇: 字符串形式的广义表的简单运算