• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ruby中的变量学习总结

    Ruby中的变量有几种形式,分别是局部变量、实例变量、类变量、全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下:

    一、命名方式

    1.局部变量:小写字母或者“_”开头,如user,解释器解释到时才开始在内存中存在,一个良好的习惯是在进行变量定义时用nil进行赋值初始化,否则会出现类似undefined local variable or method `z'的错误;
    2.实例变量:@开头,如@user,默认初始化为nil,此处的“实例”指的是类对象本身,或者类的对象;
    3.类变量:@@开头,如@@user,需要进行初始化后才能调用,否则会出现类似uninitialized class variable @@user in Account的错误;
    4.全局变量:$开头,如$user,默认初始化为nil;

    二、作用范围

    局部变量:如user,只作用于本类、本方法或本模块内,不同于java语言习惯,在类中定义的变量,可以在类的方法中进行调用,Ruby中的局部变量,类中定义的,只能在类中访问,其子类、方法、内部类中都无法调用,如下边示例代码:

    复制代码 代码如下:

    class Account
     user=User.new
     def myMethod
      puts user.name   #调用发生错误,user未定义
     end
    end

    实例变量:如@user,有点类似于java中POJO类的成员变量,类中随意访问,类外通过方法访问,作用于本实例对象范围内或本类的实例对象范围内(这句话有点绕口,请注意分清楚类对象本身[Account,是Class类的一个对象]和 类实例化后的对象[Account.new,是Account类的一个对象]),这是两个相互独立的域,定义在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    #输出:''

    再看如下代码:

    复制代码 代码如下:

    class A 
      #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil 
      @alpha='This is @alpha' value!'

      def A.look
       puts "#@alpha" 
      end
      def look
       @alpha='This is @alpha\' value from look!'
       puts "#@alpha" 
      end
      def look_again 
       puts "#@alpha" 
      end
    end 

    A.look        #输出:'This is @alpha' value!''
    a=A.new
    a.look        #输出:'This is @alpha' value from look!'
    a.look_again  #输出:'This is @alpha' value from look!'

    可见,@alpha='This is @alpha' value!'是定义在类对象本身的实例变量,@alpha='This is @alpha\' value from look!'是定义在类实例化后的对象中的实例变量,另外,使用实例变量时还应该注意一下几点:

    1、实例变量不管是在类中定义,还是在方法中定义,其都属于类,而不是方法
    2、实例变量只存在于实例范围,不可在子类中引用或者赋值
    3、实例变量永远都是Private的,不能暴露为Public,外部访问通过方法进行,可以使用attr_accessor简便定义

    类变量:如@@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 BA
    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的基本语法学习总结
    • Ruby中的方法(函数)学习总结
    • 详解Ruby中的异常
    上一篇:Ruby数组(Array)学习笔记
    下一篇:Ruby中的方法(函数)学习总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Ruby中的变量学习总结 Ruby,中的,变量,学习,总结,