ruby语言里的self理解
关键的一句话:关键看谁调用self,self就属于谁
有3种情况:
1、在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
输出结果:
Just started class S S Nested module S::M S::M Back in the outer level of S S
2、在实例方法中,self代表调用方法的对象,对象实际上是内存里的一块内存空间,例如:
class S def m puts 'Class S method m:' puts self end end s = S.new s.m
输出结果如下:
1 Class S method m: 2 #<S:0x2bc0a10>
3、在单例方法中,是为一个对象设置的函数,所以此时的self代表的是拥有这个方法对象,例如:
1 obj = Object.new 2 def obj.show 3 print 'I am an object: ' 4 puts "here's self inside a singleton method of mine:" 5 puts self 6 end 7 obj.show 8 print 'And inspecting obj from outside, ' 9 puts "to be sure it's the same object:" 10 puts obj
其中,Object是最大的一个类,不需要再定义了,所以这里就省略了class部分对Object的定义。
输出结果为:
1 I am an object: here's self inside a singleton method of mine: 2 #<Object:0x2835688> #这里就是对象所占的内存地址 3 And inspecting obj from outside, to be sure it's the same object: 4 #<Object:0x2835688>
4、在类方法中,self代表的是类本身
1 class S 2 def S.x 3 puts "Class method of class S" 4 puts self 5 end 6 end 7 S.x
运行结果如下:
1 Class method of class S 2 S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix