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类成员变量时是否有命名约定?
答案 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使用前缀@
来标识实例变量。当您在类/单例上下文中分配或使用它们时,它们将是该类的实例变量。
使用类实例变量稍微复杂一些,但经常使用,因为它在使用继承时提供了更多选项。