我有以下代码:
class Test {
@s = 'Bob'
def print_bob
p @s
end
end
当我尝试拨打print_bob
时,会打印nil
。为什么是这样?我知道类变量在类中的任何地方都可见吗?
答案 0 :(得分:2)
@s
是类实例变量,而不是Test
类实例的实例变量。 print_bob
是一种实例方法。由于您没有定义这些实例变量,因此在创建Test
的实例时,因此当您在print_bob
的实例上调用方法Test
时,您将获得{{1} }}。记住 - 实例和类变量,如果在定义之前尝试使用它们,它们将返回 nil 。
查看以下代码:
nil
答案 1 :(得分:0)
@s
是实例变量定义,而不是类变量。所以在类体中,定义@s
定义了类的intance变量,但是如果你尝试在方法体中引用它,则引用“常规”实例变量,这是未设置的。
类变量是用@@
定义的,所以这应该按照你的预期工作:
class Test {
@@s = 'Bob'
def print_bob
p @@s
end
end