Ruby 变量
变量是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问
Ruby 语言支持五种类型的变量:
- 一般小写字母、下划线开头: 变量(Variable)
$
开头: 全局变量 (Global variable)@
开头: 实例变量 (Instance variable)@@
开头: 类变量 (Class variable),类变量被共享在整个继承链中- 大写字母开头: 常数 (Constant)
其实这些变量我们在前面的章节中或多或少都有了解过,本章我们将详细学习者五种类型的变量
Ruby 全局变量
全局变量以 $ 开头。
未初始化的全局变量的默认值为 nil
使用 -w 选项后,未初始化的全局变量会产生警告
因为全局变量是所有范围可见的,也就说任何地方都能改变她的值,因此不建议使用全局变量。
main.rb
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. $global_variable = 13 class HelloWorld def print_global puts "全局变量在 HelloWorld 中输出为 #$global_variable" end end class HelloWorld2 def print_global puts "全局变量在 HelloWorld 中输出为 #$global_variable" end end class1obj = HelloWorld.new class1obj.print_global $global_variable = 17 class2obj = HelloWorld2.new class2obj.print_global $global_variable = 19 puts "全局变量为 : #$global_variable"
$global_variable 是全局变量
注意: Ruby 语言中可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值
运行以上 Ruby 脚本,输出结果如下
$ ruby main.rb 全局变量在 HelloWorld 中输出为 13 全局变量在 HelloWorld 中输出为 17 全局变量为 : 19
Ruby 实例变量
实例变量以 @ 开头。
未初始化的实例变量的的默认值为 nil
在使用 -w 选项后,未初始化的实例变量会产生警告信息
main.rb
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. class Company def initialize(id, name, addr) @comp_id=id @comp_name=name @comp_addr=addr end def display_details() puts "Company id #@comp_id" puts "Company name #@comp_name" puts "Company address #@comp_addr" end end # 创建对象 comp1=Company.new(1, "百度", "北京市海淀区") comp2=Company.new(2, "简单教程", "北京市东城区") # 调用方法 comp1.display_details() comp2.display_details()
@cust_id 、 @cust_name 和 @cust_addr 是实例变量
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb Company id 1 Company name 百度 Company address 北京市海淀区 Company id 2 Company name 简单教程 Company address 北京市东城区
Ruby 类变量
类变量以 @@
开头,且必须初始化后才能在方法中使用
类变量在定义它的类或模块的子类或子模块中可共享使用。
引用一个未初始化的类变量会产生错误。
在使用 -w 选项后,重载类变量会产生警告
main.rb
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. class Company @@no_of_company = 0 def initialize(id, name, addr) @comp_id=id @comp_name=name @comp_addr=addr @@no_of_company += 1 end def display_details() puts "Company id #@comp_id" puts "Company name #@comp_name" puts "Company address #@comp_addr" end def total_no_of_company() puts "Total number of company: #@@no_of_company" end end comp1=Company.new(1, "百度", "北京市海淀区") comp1.total_no_of_company() comp2=Company.new(2, "简单教程", "北京市东城区") comp2.total_no_of_company()
上面范例中,@@no_of_customers 是类变量 id、name 和 addr 是局部变量
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb Total number of company: 1 Total number of company: 2
Ruby 局部变量
局部变量以小写字母或下划线(_) 开头。 局部变量的作用域从 class、module、def、do 到相对应的结尾或者从左大括号到右大括号 {}
当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法
对未初始化的局部变量赋值也可以当作是变量声明。
局部变量的生命周期在 Ruby 解析程序时确定 局部变量会一直存在,直到当前域结束为止。
在上面的范例中,initialize
方法中的 id、name 和 addr 是局部变量
Ruby 常量
Ruby 语言中的常量要遵守以下规则
- Ruby 语言中的常量以大写字母开头
- 定义在类或模块内的常量可以从类或模块的内部访问
- 定义在类或模块外的常量可以被全局访问
- 常量不能定义在方法内
- 引用一个未初始化的常量会产生错误
- 对已经初始化的常量赋值会产生警告
main.rb
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. GLOBAL_CONST_VAR = "www.twle.cn" class HelloWorld VAR1 = 1 VAR2 = 3 def show puts "第一个常量的值为 #{VAR1}" puts "第二个常量的值为 #{VAR2}" puts "全局的常量 GLOBAL_CONST_VAR 值为: #{GLOBAL_CONST_VAR}" end end object=HelloWorld.new() object.show
定义在模块内的常量 定义在类内部的常量
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb 第一个常量的值为 1 第二个常量的值为 3 全局的常量 GLOBAL_CONST_VAR 值为: www.twle.cn
Ruby 特殊变量
Ruby 语言中有一些特殊的变量,它们有着局部变量的外观,但行为却像常量。
而且不能给这些特殊变量赋任何值。
下面是 Ruby 语言中特殊的变量
- self: 当前方法的接收器对象
- true: 代表 true 的值
- false: 代表 false 的值
- nil: 代表 undefined 的值
- FILE: 当前源文件的名称
- LINE: 当前行在源文件中的编号