`
wtb
  • 浏览: 106520 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Ruby中闭包与block

阅读更多

转道友Blog中的一小段code说明ruby中的闭包

procs = []   
(1..3).each do |i|   
  procs << lambda { puts i }   
end  
procs.each { |p| p.call }   
  
# Output:   
# 1   
# 2   
# 3   
  
###############################################   
  
procs = []   
for j in (1..3) do  
  procs << lambda { puts j }   
end  
procs.each { |p| p.call }   
  
# Output:   
# 3   
# 3   
# 3  

 

为什么是上面的结果?首先这是因闭包所引起;

Ruby 1.8.x中,与each迭代器关联的block里的变量是局部变量,每次each中使用yield来调用block时,block都会创建新的局部变量。而for与each的区别就是在循环变量的作用域上:for被展开后,先定义了一个局部变量,然后再调用each迭代器。也就是主产for实际上只产生了一个j局部变量,而each每循环一次则产生一个。

分享到:
评论
1 楼 healer_kx 2009-08-13  
我觉得这种语法很晦涩,不应该形成这种差别,一般来说,有个for循环就可以完成80%的循环工作了,这样给dev造成很多障碍。比C++还复杂,不好。

相关推荐

    Ruby中的block、proc、lambda区别总结

    在规则引擎中,Ruby 的闭包使用特别频繁,而且有 block,Proc和 lambda 等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下 Ruby 的闭包,特别是 block,proc 和 lambda 几种用法的异同,这次的...

    Ruby中使用Block、Proc、lambda实现闭包

    闭包(Closure),是指未绑定到任何对象的自由代码,闭包中的代码与任何对象和全局变量无关,只与执行此段代码的上下文相关。 今天我们简要的看一下ruby中的闭包实现。 Ruby中的闭包实现有:Block,Proc,Lambada。 ...

    ruby中文 文档

    Ruby的核心特点包括它的灵活性、块语法、闭包以及面向对象特性。Ruby的元编程能力也相当强大,允许在运行时修改或创建代码,这种能力使得Ruby在许多领域都有广泛的应用。 Ruby的中文文档,如“ruby中文文档.chm”,...

    ruby语言帮助文档(简体中文)

    块可以与方法一起使用,形成闭包,这样就可以在方法中捕获并操作外部作用域的变量。 6. **元编程**:Ruby的元编程能力非常强大,允许在运行时修改和创建类和对象。这得益于Ruby的反射API和`send`方法,可以动态地...

    Ruby语言中文教程

    通过这个中文教程,你将掌握Ruby语言的基础知识,包括语法、对象系统、控制结构、数据结构、类和模块、异常处理、方法与闭包以及元编程。同时,了解Ruby的生态系统,能够利用Gem管理和使用社区的资源,提升开发效率...

    Ruby中文教程,佩戴实例

    Ruby支持块(block)和闭包(closure),这在处理迭代和回调函数时非常有用。 Ruby还引入了模块(module)和类(class),用于组织代码和实现多态性。类是创建对象的蓝图,而模块则可以用来封装方法,实现命名空间...

    ruby基础教程中文第四版

    8. **闭包和块**:Ruby中的块和闭包是重要的概念,它们允许函数或方法捕获和操作外部变量,是实现函数式编程风格的关键。 9. **正则表达式**:Ruby内置了强大的正则表达式引擎,提供了丰富的匹配和替换功能。 10. ...

    ruby 中文文档 入门必学

    3. **块、迭代器和闭包**:Ruby中的块(Block)和迭代器是其强大的特性之一,常用于遍历数据结构。闭包(Closure)即lambda或Proc,是能够记住其定义时环境的代码块。 4. **元编程**:Ruby允许在运行时修改自身,这...

    Ruby教程 脚本语言

    4. **块和闭包**:Ruby中的块(block)是代码段,可以与方法交互,闭包(closure)则允许函数记住其定义时的上下文,增强了代码的复用性。 5. **元编程**:Ruby提供了丰富的元编程能力,允许在运行时修改和创建类、...

    《Ruby用户指南》中文版

    书中还将详细介绍Ruby的块(block)、Proc 和 Lambda,这些都是Ruby实现回调和闭包的关键工具。通过它们,你可以编写出更简洁、更具表达力的代码。此外,Ruby的迭代器和集合操作,如map、reduce、select等,提供了...

    透视Ruby 1.9的Lambda函数

    在Ruby 1.9中,Block参数现在是局部的,这意味着它们不再在Block外部可见,这增强了Block的封装性和安全性。这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的...

    Ruby不完全读书指南.rar

    另外,Ruby的块(Block)和块语法是其独特之处,可以用于迭代、回调和延迟执行等功能。 Ruby的控制结构包括条件语句(如if/else、case)、循环(如while、for、until)以及异常处理(如begin/rescue/ensure)。Ruby...

    Ruby 基础

    Ruby支持块(block),这是匿名函数的一种形式,通常与`yield`关键字一起使用。块可以用`do..end`或`{..}`定义,并且可以接受参数。 面向对象编程是Ruby的核心。Ruby中的每个对象都是一个类的实例,每个类都继承自`...

    ruby中文文档 chm版

    最后,可以探索Ruby的高级特性,如闭包、元编程和Gem(Ruby的包管理系统)。 总的来说,Ruby是一种强大且灵活的编程语言,尤其适合快速开发和原型设计。通过阅读和理解Ruby中文文档的CHM版,无论是初学者还是经验...

    ruby语言入门教程(中文版)[PDF]

    此外,Ruby还有块(block)、 Proc 和 Lambda 等特性,它们在处理迭代和函数式编程时非常有用。 面向对象是Ruby的一大特色。所有Ruby对象都是类的实例,每个对象都可以接收消息(方法调用)。Ruby提供了类、模块和...

    Ruby200

    3. **块和闭包**:Ruby 支持块(block),这是一种代码块的语法结构,它可以与函数一起使用,实现类似 JavaScript 中的回调函数或 Python 中的 lambda 函数。块可以形成闭包,保留其定义时的作用域环境。 4. **元...

    ruby小程序

    4. 基于块的编程:Ruby支持块(block)的概念,类似于其他语言中的匿名函数或闭包。这使得代码更加简洁,可以方便地处理迭代和回调。 5. 元编程:Ruby的元编程能力强大,允许在运行时修改和创建类、方法等,为解决...

    Meta Programming Ruby

    4. **闭包与块**:Ruby支持闭包(closures),即可以访问其定义作用域外部变量的函数。闭包在Ruby中通常以“块”的形式出现,并且可以作为参数传递给方法。 5. **模块与混合**:通过将模块混入(mix-in)类中,可以...

Global site tag (gtag.js) - Google Analytics