Class method

Class method(类方法,相当于java里的静态方法) rubyclass Method是属于类本身的方法。定义class method的方法与普通的实例方法不同的地方就是要在类方法的名称前加上类的名字,并用点号隔开类名和方法名。调用类方法时也需要在方法名前加类名,并用点号隔开。

例:

class MyClass

def MyClass.classMethod

Print "hello from class Method"

end

end

MyClass.classMethod

上面的脚本将输出:hello from classMethod

Class Variables(相当于java的静态变量) 定义和引用一个class variable需要在变量名前加上两个@符号。当一个class variable首次声明时,必须给他一个初始值。在ruby中 class其实也是一个对象,它不仅能引用的class variable,它还有属于自己的instance variable。看下面的例子:

class MyClass

@@classvar=1000

@instvar=1000

def MyClass.classMethod

@@classvar+=10;

@instvar+=10;

end

def instMethod

@@classvar+=1;

@instvar=1;

end

def MyClass.showvars

puts("Class var @instvar=#{@instvar} @@classvar=#{@@classvar}")

end

def instshowvars

puts("Inst var @instvar=#{@instvar} @@classvar=#{@@classvar}")

end

end

3.times do

ob=MyClass.new

MyClass.classMethod

ob.instMethod

MyClass.showvars

ob.instshowvars

end

程序输出:

Class var @instvar=1010 @@classvar=1011

Inst var @instvar=1 @@classvar=1011

Class var @instvar=1020 @@classvar=1022

Inst var @instvar=1 @@classvar=1022

Class var @instvar=1030 @@classvar=1033

Inst var @instvar=1 @@classvar=1033

紧挨着@@classvar的声明的语句@instvar=1000定义了一个类的instance variable。这个变量是属于类本身的,不属于任何该类声明的对象。在实例方法中引用的@instvar没有1000这个初始值。再书中下面的例子:

class MyClass 

   @@classvar = 1000 

   @instvar = 1000 

    

   def MyClass.classMethod 

      if @instvar == nil then 

         @instvar = 10 

      else 

         @instvar += 10 

      end 

   end 

    

   def instanceMethod 

      if @instvar == nil then 

         @instvar = 1 

      else 

         @instvar += 1 

      end             

   end          

end 

 

ob = MyClass.new 

puts MyClass.instance_variable_get(:@instvar)

puts( '--------------' ) 

for i in 0..2 do    

   #MyClass.classMethod 

   ob.instanceMethod 

   puts( "MyClass @instvar=#{MyClass.instance_variable_get(:@instvar)}") 

   puts( "ob @instvar= #{ob.instance_variable_get(:@instvar)}" ) 

end 

程序输出:

1000

--------------

MyClass @instvar=1000

ob @instvar= 1

MyClass @instvar=1000

ob @instvar= 2

MyClass @instvar=1000

ob @instvar= 3

instance_variable_get方法是ruby提供的一个方法,可以查看class object的内部值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值