【发布时间】:2014-10-23 07:41:30
【问题描述】:
请帮助我理解类级实例变量。
@@ 是一个类变量,相当于类实例中的实例变量(@)。
但是在类级别使用时,实例变量 (@) 是什么?如果它为类实例定义了一个定义,那么为什么不在初始化器中定义它呢?
class MyClass
cattr_reader :class_variable
def self.new_instance(cv, cliv, iv)
@@class_variable = cv
@class_level_instance_variable = cliv
self.new(iv)
end
def initialize(iv)
@instance_variable = iv
end
def use
puts "class_var=#{self.class.class_variable.inspect}\ninst_var=#{@instance_variable.inspect}\ncliv=#{@class_level_instance_variable.inspect}"
end
end
c = []
c << MyClass.new_instance(1,2,3)
c[0].use
c << MyClass.new_instance(4,5,6)
c[1].use
c << MyClass.new_instance(7,8,9)
c[2].use
c[0].use
c[1].use
c[2].use
【问题讨论】:
-
当你在类级别设置实例变量时,它就变成了类实例变量,这与类变量略有不同(并不完全等同)。更多信息:railstips.org/blog/archives/2006/11/18/…
-
@Marek Lipka:所以,如果我理解正确,类级实例变量完全等同于预初始化的实例级实例变量,如果我在一个类方法中创建多个类实例,每个实例都变成用这个变量初始化。
-
不,根本没有这样的行为。我的意思是类级别的实例变量是 regular 实例变量,但绑定到类对象(记住在 Ruby 中类也是对象)。
-
@Paul:你为什么不输入一些代码来说明你的意思?
标签: ruby class instance-variables class-variables