美文网首页
Ruby:类中的变量

Ruby:类中的变量

作者: Wougle | 来源:发表于2018-01-10 10:05 被阅读0次

    Ruby提供了四种变量,分别是局部变量、实例变量、类变量、全局变量。

    一、命名方式

    局部变量:小写字母或者“_”开头,如user或者_user,解释器解释到时才开始在内存中存在,在进行变量定义时用nil进行赋值初始化;
    实例变量:以@开头,如@user,默认初始化为nil,此处的“实例”指的是类对象本身,或者类的对象;
    类变量:以@@开头,如@@user,需要进行初始化后才能调用;
    全局变量:以$开头,如$user,默认初始化为nil;

    二、作用范围

    局部变量:如user,只作用于本类、本方法或本模块内。Ruby中的局部变量,类中定义的,只能在类中访问,其子类、方法、内部类中都无法调用,如下边示例代码

    class Account  
        user=User.new  
        def myMethod  
            puts user.name   #调用发生错误,user未定义  user的作用域不在此
        end  
    end  
    

    实例变量:如@user,作用于本实例对象范围内或本类的实例对象范围内,在类定义内对实例变量的赋值和读取没有限制;在类外访问实例变量时,则可以通过方法来访问。
    比如user,是User类的一个对象,user.new是User类的一个实例对象,这是两个相互独立的域,定义在Account中的变量不能在Account.new中访问,反之亦然,如下边示例代码

    class A    
      #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil    
      @alpha='This is @alpha\' value!'   
        
      def A.look  
        puts "#@alpha"    
      end  
      def look    
        puts "#@alpha"    
      end  
    end    
      
    A.look        #输出:'This is @alpha' value!''  
    A.new.look    #输出:''
    

    类变量:如@@user,作用于类的所有范围,所有实例对象共享,包括子类及其实例对象,类变量通过Protected声明的,如下边示例代码

    
    class A    
      #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil    
      @@alpha='This is @alpha\' value!'   
      
      def A.look  
        puts "#@@alpha"    
      end  
      def look   
        puts "#@@alpha"    
      end  
      def look_again    
        puts "#@@alpha"    
      end  
    end    
      
    class B<A  
    end  
      
    A.look        #输出:'This is @alpha' value!'  
    B.look        #输出:'This is @alpha' value!'  
    a=A.new  
    a.look        #输出:'This is @alpha' value!'  
    a.look_again  #输出:'This is @alpha' value!'  
    b=B.new  
    b.look        #输出:'This is @alpha' value!'  
    b.look_again  #输出:'This is @alpha' value!'  
    

    全局变量:如$user,尽量少使用 ,作用于整个程序的生命周期,常驻内存,过量使用会引起性能下降,内存溢出,Ruby内置一些全局变量,获取相关数据十分方便,如$0’代表的是所运行应用程序的文件名称,‘$:’代表的是默认的文件搜索路径;'$$'代表的是 ruby 程序的进程 id

    相关文章

      网友评论

          本文标题:Ruby:类中的变量

          本文链接:https://www.haomeiwen.com/subject/lfbnnxtx.html