为什么我们不能在ruby中使用小写字母作为类成员变量?

时间:2014-06-05 14:38:07

标签: ruby class variables

class A
  AB = 123
  def print_var
    print AB
  end
end
A.new.print_var

以上代码打印123.

class B
  ab = 245
  def print_var
    print ab
  end
end

此代码抛出错误,说明未定义的局部变量或方法“ab”。为什么会这样?在声明ruby类成员变量时是否有命名约定?

1 个答案:

答案 0 :(得分:8)

这两个例子都没有使用“类成员变量”。

第一个

AB = 123

是常数。

第二个

ab = 245

是一个局部变量。它不在方法定义的范围内,这就是你得到错误的原因。


这是如何声明和使用类变量(来自实例方法):

class C
  @@ab = 678
  def print_var
    print @@ab
  end
end
C.new.print_var

Ruby使用前缀@@来标识类变量,最常见的约定是使用小写字母(可能包含数字和下划线)。


这是如何声明和使用类实例变量(同样,在实例方法中 - 注意我们需要一个类/单例方法,以便首先访问它) :

class D
  @ab = 890
  def self.get_ab
    @ab
  end

  def print_var
    print self.class.get_ab
  end
end
D.new.print_var

Ruby使用前缀@来标识实例变量。当您在类/单例上下文中分配或使用它们时,它们将是该类的实例变量。

使用类实例变量稍微复杂一些,但经常使用,因为它在使用继承时提供了更多选项。