对 Ruby 有了一个大概的认识之后,现在我们来了解一下 Ruby 语言中的变量和常量。

本地/局部变量(Local Variable)

以小写字母或下划线(_)开头的标识(zhì)符为本地变量,也称局部变量,例如:。

name = "Meniny"

实例变量(Instance Variable)

@ 开头的标识符为实例变量,它们属于某个类的实例,例如:

class someclass
  @emptyvar
end

类变量

@@ 开头的标识符为类变量,例如:

module somemodule
	@@somevar = "Hello Ruby"
	class someclass
		def display
			print "#@somevar"
		end
	end
end

全局变量(Global Variable)

$ 开头的标识符为全局变量,例如:

$some_path = "/var/mobile/"

伪变量

此外还有一些被称为伪变量的标识符,它们是只读的。

# 当前方法的执行体
print "#{self}"

# NilClass 类唯一实例
print "#{nil}"

# TrueClass 类唯一实例
print "#{true}"

# FalseClass 类唯一实例
print "#{false}"

# 当前源文件的文件名
print "#{__FILE__}"

# 当前源文件的行号
print "#{__LINE__}"

常量(Constant)

以大写字母开头的标识符为常量,对常量进行再次赋值会引发警告,而如果使用未定义的常量则会抛出 NameError 错误。

附:

在类和模块外部定义的常量属于 Object

使用 ::常量名 可以引用属于 Object 的常量,使用 模块名/类名::常量名 可以引用外部的常量。

当引用模块和类中同名的常量时,优先引用嵌套树外侧的常量,Object 的优先度最低,不过我建议大家尽量不使用同名常量。

例如:

# 属于 Object 的常量
GroupName = "心守家园"

 4module Site
  SiteUrl = "https://www.you2v.com"

  class Sichuan
    Add = "凉山"
    # 引用属于 Object 的常量
    print "#{::GroupName}"
  end
end

# 直接引用类名、模块名
# 引用属于 Object 的模块时可以省略"::"
print "#{::Site}\n#{Site::Sichuan}"
# 属于模块的常量
print "#{Site::SiteUrl}"
# 属于类的常量
print "#{Site::Sichuan::Add}"