ruby中的全局变量

全局变量是可以从程序中的任何位置访问的变量,而不考虑范围。它们以$(美元符号)字符开头表示。然而,全局变量的使用通常被认为是“非Ruby”,并且您很少看到它们。...

全局变量是可以从程序中的任何位置访问的变量,而不考虑范围。它们以$(美元符号)字符开头表示。然而,全局变量的使用通常被认为是“非Ruby”,并且您很少看到它们。

hand reaching out of a computer to grab ruby

定义全局变量

全局变量的定义和使用与任何其他变量一样。要定义它们,只需给它们赋值并开始使用它们。但是,顾名思义,从程序中的任何一点分配给全局变量都具有全局意义。下面的程序演示了这一点。该方法将修改一个全局变量,这将影响第二个方法的运行方式。

$speed = 10 def accelerate $speed = 100 end def pass_speed_trap if $speed > 65 # Give the program a speeding ticket end end accelerate pass_speed_trap

不受欢迎的

那么为什么这是“非Ruby”的,为什么不经常看到全局变量呢?简单地说,它破坏了封装。如果任何一个类或方法可以在没有接口层的情况下随意修改全局变量的状态,那么依赖该全局变量的任何其他类或方法可能会以意外和不希望的方式运行。此外,这种交互可能很难调试。是什么修改了这个全局变量以及何时修改的?您将浏览大量代码以找到它的作用,这本可以通过不违反封装规则来避免。

但这并不是说Ruby中从不使用全局变量。有许多具有单字符名称(a-la Perl)的特殊全局变量可以在整个程序中使用。它们表示程序本身的状态,并执行诸如修改所有GET方法的记录和字段分隔符之类的操作。

全局变量

  • $0—此变量由$0(即零)表示,它保存正在执行的顶级脚本的名称。换句话说,是从命令行运行的脚本文件,而不是保存当前正在执行的代码的脚本文件。因此,如果从命令行运行script1.rb,它将保存script1.rb。如果此脚本需要script2.rb,则该脚本文件中的$0也将是script1.rb。名称$0反映了UNIX shell脚本中用于相同目的的命名约定。
  • $*-数组中的命令行参数,由$*(美元符号和星号)表示。例如,如果要运行./script.rb arg1 arg2,则$*将等效于%w{arg1 arg2}。这相当于特殊的ARGV数组,并且具有较少的描述性名称,因此很少使用它。
  • $$-解释器的进程ID,由$$(两个美元符号)表示。了解自己的进程ID在后台程序(后台运行,不与任何终端连接)或系统服务中通常很有用。然而,当涉及线程时,这会变得更加复杂,所以要小心盲目地使用它。
  • $/和$\-这些是输入和输出记录分隔符。当您使用GET读取对象并使用puts打印它们时,它使用这些来知道何时读取了完整的“记录”,或者在多个记录之间打印什么。默认情况下,这些字符应为换行符。但由于这些影响所有IO对象的行为,因此很少使用它们(如果有的话)。您可以在较小的脚本中看到它们,在这些脚本中,打破封装规则不是问题。
  • $? - 执行的最后一个子进程的退出状态。在这里列出的所有变量中,这可能是最有用的。原因很简单:不能通过系统方法返回的值来获取子进程的退出状态,只能是true或false。如果必须知道子进程的实际返回值,则需要使用此特殊的全局变量。同样,此变量的名称取自UNIX shell。
  • $\ gets读取的最后一个字符串。对于那些从Perl来到Ruby的人来说,这个变量可能是一个混淆点。在Perl中,$\变量的含义类似,但完全不同。在Perl中,$\保存最后一条语句的值,在Ruby中,它保存上一次gets调用返回的字符串。它们的用法是相似的,但它们真正持有的是非常不同的。您也不经常看到这个变量(仔细想想,您很少看到这些变量中的任何一个),但是您可以在处理文本的非常短的Ruby程序中看到它们。

简而言之,您很少看到全局变量。它们的形式通常不好(而且“非Ruby”),只有在非常小的脚本中才真正有用,在这些脚本中,它们的使用的全部含义都可以得到充分的理解。有一些特殊的全局变量可以使用,但在大多数情况下,它们没有被使用。要理解大多数Ruby程序,您不需要了解太多关于全局变量的知识,但您至少应该知道它们存在。

  • 发表于 2021-09-05 06:00
  • 阅读 ( 178 )
  • 分类:IT

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...一种解释语言。Ruby不是一个编译语言C或C++的快速。 Ruby中的方法与其他编程语言中的函数类似。方法包含一组要执行某项任务的语句。Ruby使用块定义闭包。闭包具有从外部作用域读取和写入变量的权限。Ruby有数组、哈希等数据...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 345 )

如何在linux上的bash中设置环境变量

...环境,但请注意!我们将看到,您可以创建不添加到环境中的变量,这样子进程就不会继承这些变量。 如果子进程是一个shell,则该shell将从它自己的、新的变量集进行初始化。因此,如果在当前shell中更改命令提示符,然后启...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 224 )

作用域如何影响powershell脚本

...本或命令shell正在运行的当前环境。作用域用于保护环境中的某些对象不被脚本或函数无意中修改。特别是,除非这些命令中的参数另有规定,否则从另一个作用域运行的命令可以保护以下内容不受修改: 变量 别名 功能 PowerShe...

  • 发布于 2021-04-11 03:54
  • 阅读 ( 258 )

如何在windows中使用全局系统环境变量

... 创建一个新的全局系统变量非常简单,这是隐藏在视线中的特性之一。请注意,屏幕截图是针对WindowsServer2008的,但是大多数版本的Windows的过程几乎相同,只有少数几个屏幕不同的。在在“控制面板”中,打开“系统”选项(...

  • 发布于 2021-04-13 04:31
  • 阅读 ( 175 )

地方的(local)和全局变量(global variables)的区别

局部变量与全局变量 全局变量可以在计算机程序中的任何地方使用。这意味着全局变量可以在许多函数中使用。这个全局变量可以在各种用户定义的头文件以及java包中使用。全局变量也可以通过编程方式更改。 当谈到局部变...

  • 发布于 2021-06-23 16:34
  • 阅读 ( 190 )

python(python)和红宝石(ruby)的区别

...作。 实例化 –实例化是从类创建对象实例的过程。Ruby中的实例变量是严格私有的,这意味着它们只能通过方法访问,因此需要方法值。实例变量定义“getter”和“setter”方法来访问属性,前者是属性的名称,后者以等号作为...

  • 发布于 2021-06-25 22:26
  • 阅读 ( 251 )

地方的(local)和全局变量(global variable)的区别

...的名称。它可以用于在整个程序中操作存储在该内存位置中的值。在C等编程语言中有两种类型的变量。它们是局部变量和全局变量。局部变量是在函数中声明的,并且只能由该函数访问。另一方面,全局变量在程序的函数外声...

  • 发布于 2021-07-01 00:27
  • 阅读 ( 1032 )

红宝石(ruby)和ruby on rails(ruby on rails)的区别

...的 类型 开源 开源 好处 它是一种动态编程语言,Ruby中的变量都是动态类型,具有更大的灵活性 Web应用程序可以在更短的时间内编写,它的gems(函数库)可以在不同的代码库中使用构建在Ruby上 网站 ruby-lang.org网站 rubyonrails...

  • 发布于 2021-07-12 08:27
  • 阅读 ( 255 )

os x最佳全局热键管理器

...是定制做你的具体出价。尽管有许多方法可以将自定义的全局键盘快捷键添加到OSX中,但Quicksilver由于其速度和多功能性而成为最佳选择。水银平台:OSX价格:免费下载页面为任何Quicksilver操作指定热键。将鼠标移动指定给任何Qu...

  • 发布于 2021-07-22 21:20
  • 阅读 ( 187 )

php session_start()函数

...局部变量 全局变量在整个程序中可见,并且可以由程序中的任何函数使用。局部变量在函数中声明,这是它唯一可以使用的地方。

  • 发布于 2021-09-12 11:16
  • 阅读 ( 149 )
1697894676
1697894676

0 篇文章

相关推荐