📜  红宝石 |范围(1)

📅  最后修改于: 2023-12-03 14:56:49.215000             🧑  作者: Mango

红宝石 | 范围

红宝石是一种通用、解释型编程语言,由日本人松本行弘(Matz)在1995年推出,被广泛应用于Web开发和软件开发领域。红宝石具有动态类型、面向对象、函数式编程等特性,与Python、Perl等语言相似,它还拥有优美简洁的语法和丰富的类库。

范围是指程序内变量的可见性、访问性和作用域的概念。声明在某一作用域内的变量只能在该作用域范围内被访问和操作,这为程序的可读性、可维护性和可扩展性提供了保障。

基本语法
变量作用域

在红宝石中,变量作用域分为全局作用域和局部作用域两种,其中全局变量声明在程序的最顶层,可以被整个程序的任何地方访问和操作;而局部变量则只能在特定的代码块内使用,包括函数、循环、条件语句等。

$global_var = "I am global"          # 全局变量

def some_function
  local_var = "I am local"          # 局部变量
  puts $global_var                  # 输出全局变量
  puts local_var                    # 输出局部变量
end

some_function                         # 调用函数
变量生命周期

每个变量都有自己的生命周期,在红宝石中,一个变量的生命周期由它的作用域和存储方式共同决定。

局部变量的生命周期

局部变量的生命周期在它们所声明的代码块结束时就结束了,这意味着它们占用的内存空间可以被回收。

def some_function
  local_var = "I am local"          # 局部变量
  puts local_var                    # 输出局部变量
end

some_function                         # 调用函数
puts local_var                      # 报错:undefined local variable

全局变量的生命周期

全局变量的生命周期与整个程序的生命周期相同,只有在程序结束时才会被销毁。

$global_var = "I am global"          # 全局变量

def some_function
  puts $global_var                  # 输出全局变量
end

some_function                         # 调用函数
puts $global_var                    # 输出全局变量
作用域解析

当程序中存在同名变量时,红宝石会按照作用域优先级依次查找变量,直到找到为止。

局部变量的优先级高于全局变量

当存在同名局部变量和全局变量时,局部变量会优先被访问和操作。

$global_var = "I am global"          # 全局变量

def some_function
  $global_var = "I am modify"       # 修改全局变量
  local_var = "I am local"          # 局部变量
  puts $global_var                  # 输出全局变量
  puts local_var                    # 输出局部变量
end

some_function                         # 调用函数
puts $global_var                    # 输出全局变量
嵌套作用域

当存在嵌套作用域时,内层作用域中的变量不能被外层作用域访问和操作。

$global_var = "I am global"          # 全局变量

def some_function
  $global_var = "I am modify"       # 修改全局变量
  local_var = "I am local"          # 局部变量

  def nested_function
    puts $global_var                # 输出全局变量
    puts local_var                  # 报错:undefined local variable
    local_var = "I am modify"       # 新建局部变量
    puts local_var                  # 输出局部变量
  end

  nested_function                   # 调用嵌套函数
end

some_function                         # 调用函数
puts $global_var                    # 输出全局变量
总结

红宝石的作用域规则遵循传统的语言规则,通过变量的作用域和可见性来控制程序中各个部分的访问和操作权限,以提高程序的可读性和可维护性。在编写程序时,建议合理使用局部变量和全局变量,并根据实际需求选择正确的变量命名方式,以充分发挥程序的功能。