美文网首页
Ruby 变量

Ruby 变量

作者: changsanjiang | 来源:发表于2017-09-22 11:08 被阅读53次

    Ruby中有四种类型的变量.

    • 局部变量 ( local variable )
    • 全局变量 ( global variable )
    • 实例变量 ( instance variable )
    • 类变量 ( class variable )

    变量的命名方式决定了变量的种类.

    • 局部变量
      英文小写字母或者 _开头

    • 全局变量
      $ 开头

    • 实例变量
      @ 开头

    • 类变量
      @@ 开头

    伪变量

    除了以上四种类型以外, 还有一种名为伪变量(pseudo variable)的特殊变量. 伪变量是 Ruby 预定义好的代表某特定值的特殊变量, 因此即使我们在程序中给伪变量赋值, 他的值不会改变. Ruby 中, nil, true, false, self 等都是伪变量. 他们表面上虽然看着像变量, 但实际的行为又与变量有差别, 因此称为伪变量.

    #!/usr/bin/ruby
    # -*- coding: UTF-8 -*-
    
    # 全局变量
        # 以 $ 开头.
        # 未初始化的全局变量值为 nil, 执行时, 在使用 -w 选项后, 会产生警告.
        # 给全局变量赋值会被改变, 所以不建议使用全局变量. 
    $global_variable = 99
    
    class Class1
        def print_global
            puts "全局变量在 Class1 中输出为 #$global_variable"
        end
    end
    
    class Class2
    
        def print_global 
            puts "全局变量在 Class2 中输出为 #$global_variable"
            $global_variable = 110
            puts "全局变量重新赋值: global_variable = #$global_variable"
        end
    
    # 类变量
        # 以 @@ 开头, 且必须初始化才能在方法定义中使用. 
        # 引用一个未初始化的类变量会产生错误. 类变量在定义它的类或模块的子类或子模块中可共享使用.
        # 在使用 -w 选项后, 重载类变量会产生警告.
        @@_class_variable = 92
    
        def print_class_variable()
            @@_class_variable += 1
            puts "类变量: class_variable += 1 -> #@@_class_variable"
        end
    
    # 实例变量
        # 以 @ 开头. 未初始化的实例变量值为 nil, 执行时, 在使用 -w 选项后, 会产生警告.
        @_uninitialized
    
        def display_details()
            puts "实例变量: id = #@_id, name = #@_name, age = #@_age  uninitialized = #@_uninitialized"
        end
    
    # 局部变量
        # 以小写字母 或 下划线 _ 开头. 
        # 局部变量的作用域从 class, module, def 或 do 到相应的end或者从 { 到 }
        # 当调用一个未初始化的局部变量时, 它被解释为调用一个不带参数的方法. 
        # 对未初始化的局部变量赋值也可当作变量声明. 变量会一直存在, 直到当前作用域结束.
        # 局部变量的生命周期在 Ruby 解析程序时确定.
        # 局部变量如下: id, name, age 均为局部变量. 
        def initialize(id, name, age)
            @_id = id
            @_name = name
            @_age = age
        end
    
    # 常量
        # 以大写字母开头.
        # 常量不能定义在方法内. 定义在类或模块内的常量可以从类或模块的内部访问, 定义在类或模块外的常量可以被全局访问.
        # 引用一个未初始化的常量会产生错误. 
        # 对已经初始化的常量复制会产生警告.
    
    VAR1 = 100
    VAR2 = 200
    
        def print_constant
            puts "常量: VAR1 = #{VAR1}, VAR2 = #{VAR2}"
        end
    
    # 伪变量
        # 它们是特殊的变量, 有着局部变量的外观, 但行为却像常量. 你不能给这些变量赋任何值.
        # self : 调用该方法的instance
        # true : ...
        # false : ...
        # nil : ...
        # __FILE__ : ...
        # __LINE__ : ...
        def print_pseudo_variable()
        puts "伪变量: self = #{self}, true = #{true}, false = #{false}, __FILE__ = #{__FILE__}, __LINE__ = #{__LINE__}"
        end
    end
    
    instance1 = Class1.new
    instance1.print_global
    
    instance2 = Class2.new($global_variable,"xiaoMing",26)
    instance2.display_details
    instance2.print_global
    instance2.print_class_variable
    instance2.print_constant
    instance2.print_pseudo_variable
    

    执行结果

    全局变量在 Class1 中输出为 99
    实例变量: id = 99, name = xiaoMing, age = 26  uninitialized = 
    全局变量在 Class2 中输出为 99
    全局变量重新赋值: global_variable = 110
    类变量: class_variable += 1 -> 93
    常量: VAR1 = 100, VAR2 = 200
    伪变量: self = #<Class2:0x007fedbf099778>, true = true, false = false, __FILE__ = Test.ruby, __LINE__ = 78
    

    相关文章

      网友评论

          本文标题:Ruby 变量

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