类变量不在类函数的范围内

时间:2014-06-14 11:42:28

标签: ruby

我有以下代码:

class Test {
  @s = 'Bob'

  def print_bob
    p @s
  end
end

当我尝试拨打print_bob时,会打印nil。为什么是这样?我知道类变量在类中的任何地方都可见吗?

2 个答案:

答案 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