Ruby 变量,常量和字面量



  • Ruby 变量

    变量是存储位置,用于保存任何程序要使用的任何数据。Ruby支持五种类型的变量。在上一章中,您已经对这些变量进行了简短的描述。本章介绍了这五种变量。
    全局变量
    全局变量以$开头。未初始化的全局变量的值为nil并使用-w选项生成警告。分配给全局变量会更改全局状态。不建议使用全局变量。它们使程序变得神秘。
    这是显示全局变量用法的示例。
    
    $global_variable = 10
    class Class1
       def print_global
          puts "全局变量在Class1中: #$global_variable"
       end
    end
    class Class2
       def print_global
          puts "全局变量在Class2中: #$global_variable"
       end
    end
    
    class1obj = Class1.new
    class1obj.print_global
    class2obj = Class2.new
    class2obj.print_global
    
    
    尝试一下
    注意 - 在Ruby中,您可以通过在变量或常量之前放置一个井号(#)来访问任何变量或常量的值。
    实例变量
    实例变量以@开头。未初始化的实例变量的值为nil并使用-w选项生成警告。
    这是显示实例变量用法的示例。
    
    class Customer
       def initialize(id, name, addr)
          @cust_id = id
          @cust_name = name
          @cust_addr = addr
       end
       def display_details()
          puts "Customer id #@cust_id"
          puts "Customer name #@cust_name"
          puts "Customer address #@cust_addr"
       end
    end
    
    # Create Objects
    cust1 = Customer.new("1", "John", "广西,南宁")
    cust2 = Customer.new("2", "Poul", "福建,福州")
    
    # Call Methods
    cust1.display_details()
    cust2.display_details()
    
    
    尝试一下
    类变量
    类变量以@@开头,必须先初始化,然后才能在方法定义中使用它们。引用未初始化的类变量会产生错误。类变量在定义了类变量的类或模块的后代之间共享。使用-w选项覆盖类变量会产生警告。
    这是显示类变量用法的示例-
    
    class Customer
       @@no_of_customers = 0
       def initialize(id, name, addr)
          @cust_id = id
          @cust_name = name
          @cust_addr = addr
       end
       def display_details()
          puts "Customer id #@cust_id"
          puts "Customer name #@cust_name"
          puts "Customer address #@cust_addr"
       end
       def total_no_of_customers()
          @@no_of_customers += 1
          puts "Total number of customers: #@@no_of_customers"
       end
    end
    
    # Create Objects
    cust1 = Customer.new("1", "John", "GuangXi,NanNing")
    cust2 = Customer.new("2", "Poul", "ZheJiang,HangZhou")
    
    # Call Methods
    cust1.total_no_of_customers()
    cust2.total_no_of_customers()
    
    
    尝试一下
    局部变量
    局部变量以小写字母或_开头。局部变量的范围从类,模块,定义或do到相应的末端,或从块的右括号到其右括号{}。当引用未初始化的局部变量时,它将被解释为对没有参数的方法的调用。分配给未初始化的局部变量也可以用作变量声明。变量开始存在,直到达到当前作用域的末尾。局部变量的生存期由Ruby解析程序时确定。
    在上面的示例中,局部变量是id,name和addr。
  • 常量

    常量以大写字母开头。可以从该类或模块内访问在类或模块内定义的常量,并且可以全局访问在类或模块外定义的常量。常量不能在方法内定义。引用未初始化的常量会产生错误。对已初始化的常量进行赋值会产生警告。
    
    class Example
       VAR1 = 100
       VAR2 = 200
       def show
          puts "第一个常量的值  #{VAR1}"
          puts "第二个常量的值  #{VAR2}"
       end
    end
    
    # Create Objects
    object = Example.new()
    object.show
    
    
    尝试一下
  • 伪变量

    它们是特殊变量,具有局部变量的外观,但行为类似于常量。您不能为这些变量分配任何值。
    • self - 当前方法的接收者对象
    • true - 值true
    • false - 值false
    • nil - 表示未定义的值。
    • __FILE__ - 当前源文件的名称。
    • __LINE__ - 源文件中的当前行号。
    
    class Example
       VAR1 = 100
       VAR2 = 200
       def show
          puts "第一个常量的值  #{VAR1}"
          puts "第二个常量的值  #{VAR2}"
       end
            
            def call
                    self.show
                    puts true
                    puts false
                    puts __FILE__
                    puts __LINE__
            end     
            
            
    end
    
    # Create Objects
    object = Example.new()
    object.call
    
    
    尝试一下
  • 字面量

    Ruby用于字面量的规则既简单又直观。本节介绍所有基本的Ruby 字面量。
    整数
    Ruby支持整数。整数的范围是-230至230-1或-262至262-1。此范围内的整数是Fixnum类的对象,此范围之外的整数存储在Bignum类的对象中。您可以使用可选的前导符号,可选的基数指示符(八进制为0,十六进制为0x或二进制为0b)来写整数,然后在适当的基数后加上一串数字。下划线字符在数字字符串中被忽略。您还可以获取与ASCII字符相对应的整数值,或者通过在其前面加上问号来转义序列。
    
    123                  # Fixnum十进制
    1_234                # 带有下划线的Fixnum十进制
    -500                 # - Fixnum
    0377                 # 八进制
    0xff                 # 十六进制
    0b1011               # 二进制
    ?a                   # “a”的字符代码
    ?\n                  # 换行代码(0x0a)
    12345678901234567890 # Bignum
    
    
    浮点数
    Ruby支持浮点数。它们也是数字,但带有小数点。浮点数是Float类的对象,可以是以下任意一种-
    
    123.4                # 浮点值
    1.0e6                # 科学计数法
    4E20                 # 不需要点
    4e+20                # 指数前的符号
    
    
    字符串字面量
    Ruby字符串只是8位字节的序列,它们是String类的对象。双引号字符串允许替换和反斜杠表示法,但单引号字符串不允许替换,并且仅对\\和\'允许反斜杠表示法
    
    puts '转义使用 "\\"';
    puts 'That\'s right';
    
    
    尝试一下
    您可以使用#{expr}序列将任何Ruby表达式的值替换为字符串。在这里,expr可以是任何ruby表达式
    
    puts "一天的秒数 : #{24*60*60}";
    
    
    尝试一下
  • 反斜杠符号

    以下是Ruby支持的反斜杠表示法列表-
    符号 意义
    \n 换行(0x0a)
    \r 回车(0x0d)
    \f 换页(0x0c)
    \b 退格键(0x08)
    \a 响铃(0x07)
    \e 转义(0x1b)
    \s 空格(0x20)
    \nnn 八进制表示法(n为0-7)
    \xnn 十六进制表示法(n为0-9,af或AF)
    \cx,\Cx Control-x
    \MX Meta-x(c | 0x80)
    \M-\Cx Meta-Control-x
    \x 字符x
  • 数组

    Ruby Array的文字是通过在方括号之间放置一系列用逗号分隔的对象引用来创建的。尾部逗号被忽略。
    
    ary = [  "fred", 10, 3.14, "This is a string", "last element", ]
    ary.each do |i|
       puts i
    end
    
    
    尝试一下
  • 哈希

    通过在括号之间放置一系列键/值对来创建文本Ruby Hash,在键和值之间使用逗号=>。尾部逗号被忽略。
    
    hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
    hsh.each do |key, value|
       print key, " is ", value, "\n"
    end
    
    
    尝试一下
  • 范围(Ranges)

    范围代表一个间隔,间隔是一组具有开始和结束的值。可以使用s..e和s...e文字或Range.new构造范围。使用..构造的范围从开始到结束都包括在内。使用...创建的那些不包括最终值。当用作迭代器时,range返回序列中的每个值。 范围(1..5)表示包含1、2、3、4、5个值,范围(1...5)表示包含1、2、3、4个值。
    
    (10..15).each do |n| 
       print n, ' ' 
    end
    
    
    尝试一下