RUBY的变量,看我理解的对不对

本文探讨了Ruby中实例变量与类变量的区别,特别是在不同模块和类中的作用域及继承特性。通过具体代码示例解释了如何在类方法与实例方法中正确使用变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

module DM
def self.included(c)
puts c.class
c.extend MM
end
def set(a)
@a=a
end
module MM
def set(a)
@abc=a
end

def get
@abc
end
end
end



class TT 
Abc=123
include DM
def self.setUrl(a)
@baseUrl=a
end

def self.getUrl
@baseUrl
end
def getUrl
@baseUrl
end
def setUrl(a)
@baseUrl=a
end
end

当TT extend了MM之后,MM中的不是self开头的方法中的@开头的变量,就变成了TT这个类的实例变量,相当于在TT的代码里加入了self.{MM的所有方法}。
由于TT同时也include了DM,但DM中的方法中的@开头的变量不是TT的类实例变量,而是TT的实例的实例变量,这个好理解。

继续:

类的实例方法中定义的或者说因引用而动态定义的@开头的变量,是实例变量!但是,类的self.开头的类方法中定义的@开头的变量是类实例变量!名称即便相同,但作用域不同所以完全不同。

我自己晕了,不知道哪里有ruby的清晰的继承关系的一个图,而且很想打开TT的singleton和TT的实例的singleton看一下,看看里面到底有什么!!请教打开看一下的方法,不是打开的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值