Ruby定义类方法(即static method)有几种,简单的例子
class Foo
def Foo.dummy1
puts "dummy1"
@name = "dummy1"
@@var = "dummy1"
puts @name
end
def Foo::dummy2
puts "dummy2"
@name = "dummy2"
@@var = "dummy2"
puts @name
end
def self.dummy3
puts "dummy3"
@name = "dummy3"
@@var = "dummy3"
puts @name
end
def putsName
puts @name
puts @@var
end
end
Foo.dummy1
Foo.dummy2
Foo.dummy3
a = Foo.new
#a.dummy1 #NoMethodError
#a.dummy2 #NoMethodError
#a.dummy3 #NoMethodError
a.putsName
值得注意的是,类方法不能在实例里面调用,这个跟C++和Java等有所不同。输出结果是:
dummy1 dummy1 dummy2 dummy2 dummy3 dummy3 dummy3这里,同样的,实例属性@name的值虽然在类方法里面引用了,但是不会影响到实例a。而类变量@@var的值则被改变了。