Ruby中变量引用时的一些注意点

在表达式中,当Ruby看到像a这样的名字时,它需要判断a是一个局部变量引用还是对没有参数的方法a的调用。Ruby使用一种启发式的方法来判断这种情况。当Ruby解析源代码文件时,它会记录所有已经被赋值的符号。它认为这些符号是变量。以后当遇到一个既可以是变量又可以是方法调用的符号时,Ruby会检查是否已经对该符号进行了赋值。如果是,那么把该符号当作变量,否则当作方法调用。下面是描述这种情况的一个人为设计的例子。

def a
  print "Funciton 'a' called\n"
  99
end

for i in 1..2
  if i ==2
   print "a=",a,"\n"
  else
   a=1
   print "a=",a,"\n"
  end
end

  输出结果:

a=1
Function 'a' called
a=99

  当解析的时候,Ruby看到第一个print语句使用了a,并且由于还没有遇到对a的任意赋值语句,所以把它当作方法调用。但是当解析到第二个print语句时,由于Ruby遇到了对a的一个赋值语句,所以把它当作变量

  注意赋值语句不一定被执行--只要Ruby看到它了就可以。下面的程序不会导致错误

a=1 if false;a
(0)

相关推荐

  • Ruby中变量引用时的一些注意点

    在表达式中,当Ruby看到像a这样的名字时,它需要判断a是一个局部变量引用还是对没有参数的方法a的调用.Ruby使用一种启发式的方法来判断这种情况.当Ruby解析源代码文件时,它会记录所有已经被赋值的符号.它认为这些符号是变量.以后当遇到一个既可以是变量又可以是方法调用的符号时,Ruby会检查是否已经对该符号进行了赋值.如果是,那么把该符号当作变量,否则当作方法调用.下面是描述这种情况的一个人为设计的例子. def a print "Funciton 'a' called\n" 99

  • PHP中变量引用与变量销毁机制分析

    本文实例分析了PHP中变量引用与变量销毁机制.分享给大家供大家参考.具体分析如下: 变量是php中一个非常重要的类型了,我们的有数据都通过变量或常量来进行操作,下文来看看变量引用与变量销毁. 在php中,符号"&"表示引用. 1.看看不引用的情况是这样子: 复制代码 代码如下: $a  = "hello world";//定义一个变量,下面赋值给$b $b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a&qu

  • PHP的foreach中使用引用时需要注意的一个问题和解决方法

    一.问题先看一个例子: <?php$ar = array(1, 2, 3);var_dump($ar);foreach ($ar as &$v) {}foreach ($ar as $v) {}var_dump($ar);?>输出为: array(3) {  [0]=>  int(1)  [1]=>  int(2)  [2]=>  int(3)}array(3) {  [0]=>  int(1)  [1]=>  int(2)  [2]=>  &

  • 详细解析Ruby中的变量

    变量持有要使用的程序的数据的存储位置. Ruby支持的有五种类型的变量.在前面的章节中已经经历了一个简短描述以及这些变量.本章中介绍的这五种类型的变量. Ruby的全局变量: 全局变量以$开头.未初始化的全局变量的值是零,并使用-w选项产生警告. 全局变量的赋值会改变全局状态.这是不推荐使用全局变量.他们使得程序的含义模糊. 下面是一个例子显示使用全局变量. #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global p

  • Ruby中的变量学习总结

    Ruby中的变量有几种形式,分别是局部变量.实例变量.类变量.全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下: 一.命名方式 1.局部变量:小写字母或者"_"开头,如user,解释器解释到时才开始在内存中存在,一个良好的习惯是在进行变量定义时用nil进行赋值初始化,否则会出现类似undefined local variable or method `z'的错误: 2.实例变量:@开头,如@us

  • 实例讲解Ruby中的五种变量

    Ruby 全局变量 全局变量以 $ 开头.未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告. 给全局变量赋值会改变全局状态,所以不建议使用全局变量. 下面的实例显示了全局变量的用法. #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global puts "Global variable in Class1 is #$global_variable" end end class Class2 d

  • 在js中使用"with"语句中跨frame的变量引用问题

    在脚本编程时使用with语句,可以大大的缩减使用多级对象引用代码行的长度,这是JScript提供给我们的一个Syntax Sugar.当然不使用with,使用临时变量也可以达到同样的效果.不过创建变量时起名确实不是一件很遐意的事,就连MASM高版本中也提供了一个@@(以及@F和@B)来处理临时标号的问题,看来大家都是比较懒得啦. 我也挺喜欢用with语句的,确实可以省不少的事情,而且可以让代码变得也清晰些,特别是在处理跨frame的变量引用时,更加显得方便.这不今天就因为贪图方便又撞到枪口上了,

  • php中引用&的用法分析【变量引用,函数引用,对象引用】

    本文实例分析了php中引用&的用法.分享给大家供大家参考,具体如下: php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=&q

  • JavaScript中变量、指针和引用功能与操作示例

    本文实例讲述了JavaScript中变量.指针和引用功能与操作.分享给大家供大家参考,具体如下: 1.变量 我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢? 事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a.变量a的值实际上描述的是这组存储单元中存放的具体信息. 例如,在JS中 var a; a=10; 第一个语句在存储器中指定了一组存储单元,并命名为a: 第二个语句在这组存储单元中存储了数字10. 变量a的值为10实际上是说存储单元组a存

  • Ruby 中$开头的全局变量、内部变量、隐藏变量介绍

    Ruby 中充满了一系列的隐藏变量,我们可以从这些预定义的全局变量中获取一些有意思的信息. 全局进程变量 $$ 表示当前运行的 ruby 进程. 复制代码 代码如下: >> $$=> 17170 我们可以从当前进程杀死它自己 复制代码 代码如下: >> `kill -9 #{$$}`[1]    17170 killed     irb $? 表示最近一个子进程的状态 复制代码 代码如下: >> `echo hello`=> "hello\n&qu

随机推荐