Ruby 类的类实例变量主要用于什么地方

yakczh · 2015年07月13日 · 最后由 flingfox63 回复于 2015年07月14日 · 2284 次阅读
class A  

  @data="xxx"

  def A.getdata
    @data  
  end   

  def A.setdata=(x)  
    @data=x  
  end  

  def see

   puts "data is :  #@data "  +  A.getdata
  end 

  def look  
    puts "look data ->"+A.getdata
  end  
  end  


class B<A    
end  

class C<A


def watch
 #puts  " data is :"+@data
 puts "watch -> "+A.getdata
end 


end


a=A.new

a.see
b=B.new
b.look
c=C.new
c.watch

不能象实例变量那样直接在方法中可以调用,需要专门的读写函数,这么麻烦,主要用于哪些地方呢?

类实例变量难道不是给类实例用的吗 如果是继承的话,是把这个变量下放到类实例级别,来实现子类的变量互相不共享。

我只搜到这样的用法,不知道你这边的用途是什么。

#1 楼 @msg7086 不能继承的

class A  
  @data="xxx"
  def foo 
     print "data is "+@data
  end 
end 

class B<A   
    def bar 
        puts  "@data is :"+@data
    end 
end  

b=B.new
b.bar

#2 楼 @yakczh 参考我贴的链接,是 Ruby 1.9 里用的。

只要弄明白:类变量,类的实例变量,实例变量这三者关系就好,就知道应该什么时候用了,被这个整晕,基本是没有搞明白这三者的关系。要有一个想法就是定义类 (广义的) 实际上初始化类 (ruby 中的 class 类) 一个实例,这个有点绕口,慢慢想吧。建议可以看看这个链接:

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

看完这个也会明白为什么要多用类的实例变量,少用类变量的原因。还没有搞明白的,看看下面的例子:

class Test
  attr_accessor :var3
  @@var1 = 1  
  @var2 = 2

  def initialize
    @var3= 3  # 这个与 @var2 不在同一个作用域里.
  end

  class << self
    attr_accessor :var2
  end
end

puts Test.var2
puts Test.instance_variables

puts Test.new.var3
puts Test.new.instance_variables
需要 登录 后方可回复, 如果你还没有账号请 注册新账号