`
iandaicsu
  • 浏览: 52090 次
社区版块
存档分类
最新评论

Ruby中的闭包

    博客分类:
  • Ruby
 
阅读更多

闭包的一个重要特征是:过程(方法)内部定义的变量,即使在方法调用完成以后,仍然可以继续引用到。

 

 

def method(n)
    puts "n=#{n}"; #测试用
    return proc{|i|  n +=i } #关键:proc是一个过程对象,只能由"委托"用call来调用,这里在过程内部引用了参数变量n,将会在多次call该过程后,保留对n的引用,形成闭包!
end
 
aDelegate = method(0);#可以理解为c#中的委托,同时该语句会初始化n为0
puts aDelegate.call(1);#上一行运行完后n=0,再传入参数1后,相当于 n = n + 1,即最终n=1
puts aDelegate.call(5);#同理,最终n=6
puts aDelegate.call(10);#n=16

 

来源:Ruby学习笔记

 

分享到:
评论

相关推荐

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

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

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

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

    Ruby编程语言pdf

    在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    Java中的闭包与回调

    在Scheme、CommonLisp、Smalltalk、Groovy、JavaScript、Ruby和Python等语言中都能找到对闭包不同程度的支持。  闭包的价值在于可以作为函数对象或者匿名函数,对于类型系统而言这意味着不仅要表示数据还要表示...

    ruby学习资料大全,很全很丰富

    Ruby是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么? 解释性脚本语言: 有直接呼叫系统调用的能力 强大的字符串操作和正则表达式 开发中快速回馈 迅速和简便: 无需变量声明 变量无...

    闭包编译器:用于Google Closure编译器的Ruby包装器

    闭包编译器(作为Ruby Gem) 闭合编译器gem是用于JavaScript压缩的的精巧包装。 最新版本: gem包含Closure Compiler的2018-05-06 JAR文件。安装sudo gem install closure-compiler用法Closure::Compiler有一个...

    ruby:Ruby编程语言[mirror]

    迭代器和闭包 垃圾收集 动态加载目标文件(在某些体系结构上) 高度可移植(在许多类Unix / POSIX兼容平台以及Windows,macOS等上运行)。 如何获得Ruby 有关安装Ruby的方法的完整列表,包括使用rvm等第三方工具...

    浅谈PHP 闭包特性在实际应用中的问题

    PHP5.3 新版本跟随了很多新特性, 其中比较惹眼的特性之一就是支持了闭包。那么以后,我们也可以和那帮写 Ruby、Javascript 等等“高科技语言”的家伙们一样,写出非常酷的代码吗?

    Ruby-3.0.0

    Ruby的功能简单语法普通的面向对象功能(例如,类,方法调用) 先进的面向对象功能(例如,混合,单例方法) 运算符重载异常处理迭代器和闭包垃圾收集动态加载目标文件(在某些体系结构上) 高度可移植(在许多类...

    glimmer:由DSL引擎和数据绑定库组成的DSL框架,用于SWT的Glimmer DSL(JRuby桌面开发GUI框架),用于Opal的Glimmer DSL(纯Ruby Web GUI),用于XML(&HTML)的Glimmer DSL,Glimmer用于CSS的DSL和用于Tk的Glimmer DSL(MRI Ruby桌面开发GUI库)

    DSL块是真正的Ruby闭包,可以方便地利用外部变量并在内部和周围使用标准Ruby代码。 像往常一样用Ruby编码,并感到高兴! 没有意外的限制或对instance_exec / eval奇怪使用。 DSL语法仅限于在Glimmer模块中混合的类...

    c#源码毕业设计-ruby:Ruby编程语言[镜像]

    迭代器和闭包 垃圾收集 动态加载目标文件(在某些体系结构上) 高度可移植(可在许多类Unix / POSIX兼容平台以及Windows,macOS等上运行)。 如何获得Ruby 有关安装Ruby的方法的完整列表,包括使用rvm等第三方工具,...

    透视Ruby 1.9的Lambda函数

    Ruby的Block块是它的关键特色之一,用块能够写出简明且高度可重用的算法。即使没有别的用处,它至少消弱了人们对循环敬畏的态度。这个概念在其他语言和理论中还被称为:Lambda函数。Lambda是个十分令人迷惑的词汇,...

    Ruby基础知识之方法、代码段

    Ruby中的方法是一个有名称的代码块,是与一个或多个对象关联的参数化的代码。调用时须给出方法名,接收者(所在对象),参数值,且最后一个表达式的值做为返回值。与Ruby方法相似的是代码块,它没有名字,且调用时只...

    Groovy v2.4.13官方版

    使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。  Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别...

    groovy-官网翻译.docx

     建立在Java的基础上,同时,吸收了其他语言的优点,比如:Python、 Ruby 和 Smalltalk  Java开发人员,上手快,几乎没有学习曲线  提供静态类型检查和编译,提高性能、健壮性  支持函数编程、闭包等语法,...

    Master Groovy

    Groovy向Java添加了许多Ruby和Python脚本语言的特性. Groovy的特性包括动态类型(dynamic typing), 闭包(closures),简单对象导航( easy object navigation)和更加简洁的Lists和Maps语法.所有这些特性和其他一些...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    3.4.3 闭包在GDK中的使用 31 3.5 本章小结 33 第二篇 实际应用 第4章 商品维护 36 4.1 准备工作 36 4.2 查看商品列表 40 4.3 创建和编辑商品 44 4.4 本章小结 48 第5章 商品搜索 49 5.1 构造查询表单 49 5.2 复杂...

Global site tag (gtag.js) - Google Analytics