我有很多关于 ruby 类和模块的问题。我已经编写了一些测试文件来进一步探索它们,这些文件太长了,无法在此处发布(https://github.com/Senjai/Learning-Ruby/blob/master/class_test.rb和https://github。 com/Senjai/Learning-Ruby/blob/master/mixin-instance-var-conflict.rb )
前三个问题是关于变量的。
到目前为止,我理解它,实例变量以@为前缀,并且对于类的每个实例都是唯一的。它们只能通过访问器方法(如 attr_accessor)访问
其次,类变量,它们以@@ 为前缀。 为什么类变量不能与 attr_accessor/reader 一起使用? class.class_variable 和 instance.class_variable 有什么区别?如果一个实例从类内部(例如在实例方法中)修改了一个类变量,那会影响类定义中的静态变量吗?
第三,
为什么实例/类变量需要以@为前缀?当它们根本没有前缀时会发生什么?如下例所示:
module Test
State = {}
def state=(value)
State[object_id] = value
end
def state
State[object_id]
end
end
对于类方法,我理解实例方法定义为普通函数,类方法必须以self为前缀。为什么不能在实例化对象中使用类方法?为什么 self 让它如此特别?
最后,对于范围解析运算符,我发现它只适用于常量和类方法,如果可以以点表示法访问它们,那么首先拥有一个范围解析运算符有什么意义呢?