class C
@@Const1=1
Const2=2
@@var3=3
def self.m
p @@Const1,Const2,@@var3;
end
def m2
p @@Const1,Const2,@@var3;
C::m #ok
#m #error:undefined local variable or method `m'
end
end
p C::Const2;#2
#Ruby中使用双冒号(::)方式调用方法或变量时,
# Ruby倾向于把大写字母开头的名字,当做常量,把小写字母开头的名字,当做方法;
#使用点号(.)调用时,总是被当做方法
#p C::var3; #error:undefined method `var3' for C:Class (NoMethodError)'
#p C.var3; #error:undefined method `var3' for C:Class (NoMethodError)'
#p C::Const1; #error:uninitialized constant C::Const1 (NameError)
#p C.Const1; #error:undefined method `Const1' for C:Class (NoMethodError)'
C.m
#1
#2
#3
c=C.new
c.m2
#1
#2
#3
#1
#2
#3
在Ruby中,实例方法中可以隐式使用类变量,但是对类方法的使用,必须显式使用。