美文网首页
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

相关文章

  • From Objective-C to Ruby(0)-常量变量

    变量 & 常量 OC: ruby: 注释 OC: ruby:

  • ruby变量

    ruby中多重复值 a, b, c = 1, 2, 3 变量前加上*,表示Ruby会将未分配的值封装为数组赋值给...

  • Ruby变量

    Ruby变量是用于保存在程序中使用的数据的位置。 每个变量都有不同的名称。 这些变量名称基于一些命名约定。 不像其...

  • Ruby 变量

    Ruby中有四种类型的变量. 局部变量 ( local variable ) 全局变量 ( global vari...

  • Ruby变量

    变量是持有可被任何程序使用的任何数据的存储位置。Ruby 支持五种类型的变量。一般小写字母、下划线开头:变量(Va...

  • ruby基础

    一、Ruby 类中的变量(Ruby 提供了四种类型的变量) 局部变量:局部变量是在方法中定义的变量。局部变量在方...

  • Ruby程序员的Golang之旅03

    Golang声明变量 VS Ruby声明变量 所有编程语言里面,我敢相信没有一门能比在Ruby里面声明一个变量来的...

  • Ruby类(二)

    类 Ruby是一种面向对象语言 定义类 类中的变量 Ruby 提供了四种类型的变量: 局部变量:局部变量是在方法中...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • ruby初探——变量

    JavaScript语言中的变量一直是为人诟病的地方,初步接触Ruby后学习新的语言变量,学习心得留存在,此以备后...

网友评论

      本文标题:Ruby 变量

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