【发布时间】:2016-03-04 05:57:23
【问题描述】:
class Var
@instance_variable = "instance variable"
@@class_instance_variable = "class instance variable"
def self.class_method
puts @instance_variable
puts @@class_instance_variable
end
def instance_method
puts @instance_variable
puts @@class_instance_variable
end
end
类方法可以访问类实例和实例变量。但是实例方法只能访问类实例变量。 @instance_variable 在实例方法中为零。这背后的逻辑解释是什么?
Var.class_method #=> "instance variable" "class instance variable"
Var.new.instance_method #=> "class instance variable" nil
实例变量不被子类继承是否正确?这是为什么呢?
【问题讨论】:
-
旁注:
nil在显示的Var.new.instance_method执行结果中令人困惑,因为它 a) 应该出现在“类实例变量”之前并且 b) 不会出现完全在puts。 -
如下。 (您必须将我的 (@) 替换为 @,因为 & 号以 SO 用户名开头,并且每条评论只允许一个。)
class A; (@)(@)class_variable = 1; (@)class_instance_variable = 2; def my_method; (@)instance_variable = 3; end; end -
@FrederickCheung 我不同意这是重复的。 OP 实际上询问“
@instance_variable在实例方法中为零。这背后的逻辑解释是什么?”这是由于 OP 完全误解了实例变量作用域的概念。 -
你的问题是错误的。@@ 是一个类变量。不是你给它贴上的标签,每次你写@@var 时你都弄错了。你用@ 放在顶部的变量是一个类实例变量,所以你没有很好地标记它。以及您标记为 ok 的其他 @var 实例变量。