`
wtb
  • 浏览: 103325 次
  • 性别: 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++还复杂,不好。

相关推荐

    Swift 中的闭包和 Objective-C 中的Block

    Swift 中的闭包和 Objective-C 中的Block讲解

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

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

    swift UITableView 闭包 block

    swift UITableView 闭包 block! 使用代码创建UITableView 自定义Cell 使用闭包(block) 回调

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

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

    计算NFA中ε闭包

    计算NFA中各个状态的闭包,从键盘上输入一个NFA的描述信息(输入格式自行定义),将 该NFA的描述信息保存到合适的数据结构中,然后计算出NFA中每个状态的ε_closure。

    Swift5.2 Block(闭包)

    Swift5.2 Block(闭包)

    iOS(闭包)block传值详解

    主要介绍了iOS(闭包)block传值的相关知识以及代码分享,对此有兴趣的朋友可以学习下。

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    Java闭包 Java闭包

    在2013年发布的 JavaSE8 中包含一个叫做 Lambda Project 的计划,在 JSR-335 草案 中有描述。 JSR-335 将闭包引入了 Java 。闭包在现在的很多流行的语言中都存在,例如 C++、C# 。闭包允许我 们创建函数指针,并把...

    闭包与回调代码

    闭包与回调,如何访问private内的public函数的。

    数据库求属性集闭包&函数依赖闭包

    声明:以下仅个人观点,若有错误,敬请指正O(∩_∩)O~ ...求R的所有子集(要用到第二步中的全排列~~~),设其中一个为Ri;对每一个子集求其闭包,记为Ri+;然后求Ri+的所有子集记为(Ri+)j;最后做映射Rià(Ri+)j。

    数据库属性闭包与应用

    本文结合自己在教学过程中的体会谈谈属性闭包在关系数据理论中的应用。

    Objective-C中的block与Swift中的尾随闭包使用教程

    Block是OC中的闭包,他和swift中的闭包有什么区别呢?下面这篇文章就来给大家介绍关于Objective-C中的block与Swift中的尾随闭包使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

    关系闭包的计算

    实验目的:熟悉warshall算法,掌握求关系的自反闭包,对称闭包和传递闭包的方法。 实验内容:从键盘输入一个关系的关系矩阵,自动求出自反闭包、对称闭包和传递闭包。 计算传递闭包用Warshall算法。 #include...

    C语言实现三种闭包算法(传递,自反,对称闭包)

    C语言实现三种闭包算法,能够实现传递,自反,对称闭包

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    JS中的闭包理解。。。。。。。。

    js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。...• JavaScript中闭包作用域是词法作用域,即它在代码写好之后就被静态决定了它的作用域。

    swift闭包和OC block类型的使用

    主要介绍了swift闭包和OC block类型的使用,需要的朋友可以参考下

    JS匿名函数、闭包

    即使JavaScript中没有正式的私有对象属性的概念,但可以使用闭包来实现公有方法,而通过公有方法可以访问在包含作用域中定义的变量; 有权访问私有变量的公有方法叫做特权方法; 可以使用构造函数模式、原型模式...

Global site tag (gtag.js) - Google Analytics