全方位解读Ruby局部变量应用

开发 开发工具
Ruby局部变量是一个比较难以掌握的知识。除了在书本上学到的知识外,还需要不断的从实际代码编写中去积累经验,以巩固我们的知识库。

Ruby语言中部高,存在着一些变量。对于一个初步学习Ruby语言的朋友来说,应该熟练的掌握这些变量的运用。下面就为大家介绍一下Ruby局部变量的应用技巧。#t#

Ruby局部变量由小写字母或下划线(_)开头.局部变量不像全局和实变量一样在初始化前含nil值.

  1. ruby> $foo   
  2. nil   
  3. ruby> @foo   
  4. nil   
  5. ruby> foo   
  6. ERR: (eval):1:
     undefined local 
    variable or method 
    `foo' for main(Object)  

对Ruby局部变量的第一次赋值做的很像一次声明.如果你指向一个未初始化的局部变量,Ruby解释器会认为那是一个方法的名字;正如上面所见错误信息的. 一般的,局部变量的范围会是

  1. proc{...}   
  2. loop{...}   
  3. def...end   
  4. class...end   
  5. module...end  

整个程序(除非符合上面某个条件)

下面的Ruby局部变量例子,define?是一个检查标识符是否已定义的操作符.如果已定义它将返回标识符的描述,否则返回nil.正如你所见的,bar的范围是 loop的局部变量;当loop退出时,bar无定义.

  1. ruby> foo = 44; print foo, 
    "\n"; defined? foo   
  2. 44   
  3. "local-variable"   
  4. ruby> loop{bar=45; print bar, 
    "\n"; break}; defined? bar   
  5. 45   
  6. nil  

 

一个范围内的过程对象共享这个范围内的Ruby局部变量.这里,局部变量 bar 由 main 和过程对象 p1, p2共享:

  1. ruby> bar=0   
  2. 0   
  3. ruby> p1 = proc{|n| bar=n}   
  4. #<Proc:0x8deb0>   
  5. ruby> p2 = proc{bar}   
  6. #<Proc:0x8dce8>   
  7. ruby> p1.call(5)   
  8. 5   
  9. ruby> bar   
  10. 5   
  11. ruby> p2.call   
  12. 5  

 

注意开始的"bar=0"不能省略;此赋值允许bar的范围被 p1和 p2共享.不然 p1, p2 将会分别生成并处理它们自己的局部变量 bar, 调用 p2
也将导致"未定义局部变量或方法"错误.
过程对象的强大在于它们能被作为参数传递:共享的Ruby局部变量即使传递出原范围也仍然有效.

  1. ruby> def box   
  2. contents = 15   
  3. get = proc{contents}   
  4. set = proc{|n| contents = n}   
  5. | return get, set   
  6. | end   
  7. nil   
  8. ruby> reader, writer = box   
  9. [#<Proc:0x40170fc0>
    #
    <Proc:0x40170fac>]   
  10. ruby> reader.call   
  11. 15   
  12. ruby> writer.call(2)   
  13. 2   
  14. ruby> reader.call   
  15. 2  

 

Ruby对待范围的办法相当聪明.显然,上面例子里 contents 变量是由 reader 和 writer 共享的.我们也可以像上面那样创造多对使用box的
reader-writer;每一对共享一个 contents 变量,对之间不相干扰.

  1. ruby> reader_1, writer_1 = box   
  2. [#<Proc:0x40172820>
    #
    <Proc:0x4017280c>]   
  3. ruby> reader_2, writer_2 = box   
  4. [#<Proc:0x40172668>
    #
    <Proc:0x40172654>]   
  5. ruby> writer_1.call(99)   
  6. 99   
  7. ruby> reader_1.call   
  8. 99   
  9. ruby> reader_2.call   
  10. 15  

以上就是对Ruby局部变量的一些详细介绍。

责任编辑:曹凯 来源: jb51.net
相关推荐

2009-12-15 10:10:42

Ruby过程对象

2009-12-16 17:07:27

Ruby on Rai

2009-12-14 17:04:13

Ruby读写UNIX命

2009-12-16 09:29:26

Ruby布尔表达式

2010-01-04 14:06:35

Silverlight

2009-09-17 13:05:38

Linq局部变量类型

2009-12-15 17:28:11

Ruby自动化脚本框架

2009-12-21 13:06:05

WCF Address

2010-01-27 13:52:15

Android多媒体框

2014-06-26 17:25:22

2011-10-26 09:28:28

红帽大数据Gluster

2009-12-08 10:33:23

PHP应用问题

2009-08-26 16:37:07

C#迭代器局部变量

2017-09-13 15:37:53

2010-01-05 09:57:34

.NET Framew

2009-12-21 15:48:29

WCF应用程序

2018-05-14 09:15:24

Python变量函数

2009-09-11 10:07:05

Linq隐式类型化局部

2009-10-12 14:13:00

VB.NET使用局部变

2020-11-11 21:26:48

函数变量
点赞
收藏

51CTO技术栈公众号