`
fantaxy025025
  • 浏览: 1249597 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

ruby_proc_lambda区别

 
阅读更多

 

看书的一大好处是知道一些知识,将来可以省很多时间,例如知道一个方法,知道一个可能的bug存在的地方。

实践的好处是把这些知识变成懂得和深入理解。

 

ruby_proc_lambda区别:

proc:形如proc中的代码在当前方法内,这样这些代码中如果有return,则退出了整个方法

lambda:形如当前方法外的一个方法,return只会返回结果给当前语句,后面的语句继续执行

 

本质上来理解,可以借鉴python的yield执行的细节以及ruby自己lyber

当前语句碰到lambda,会把执行指针指向lambda的block,让出了当前执行context,执行完后再回来;

但proc的block仍会在当前的context中执行,不存在执行context的出让;

 

from http://samdanielson.com/2007/3/19/proc-new-vs-lambda-in-ruby 的一个很好的例子:

 

def foo
  f = Proc.new { return "return from foo from inside proc" }
  f.call # control leaves foo here
  return "return from foo"
end

def bar
  f = lambda { return "return from lambda" }
  f.call # control does not leave bar here
  return "return from bar"
end

puts foo # prints "return from foo from inside proc"
puts bar # prints "return from bar"
 

 

 

||

 

 

 

分享到:
评论

相关推荐

    Ruby中proc和lambda的两个区别

    主要介绍了Ruby中proc和lambda的两个区别,本文讲解了在proc和lambda中,return关键字有不同含义、检查参数的方式不同两个重要区别,需要的朋友可以参考下

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

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

    named_proc:命名 procs 和 lambdas

    当使用大量 proc 时,命名它们可能会很方便。 它使以后更容易识别它们。 有关使用命名过程的示例,请参阅 gem! 安装 添加到 Gemfile: gem 'named_proc' 命名特效 一个命名的 proc 就像一个普通的 proc,但它有...

    Ruby编程语言pdf

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

    Ruby程序设计语言 (涵盖Ruby 1.8和1.9)源代码

    《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合... Method、proc、lambda和closure  类和模块  反射和元编程

    Ruby编程语言

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

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

    Ruby中的闭包实现有:Block,Proc,Lambada。 首先,我们来看Block。 代码如下: ary = [1,2,3,4] ary.collect! do |a|  a*a end ary.each do |a|  puts a end 这段代码,我们使用了Array对象的block方法,将ary中...

    arrows:用于函数式编程和箭头的 ruby​​ lambda proc 工具

    除了 Haskell 过于通用且几乎难以接近的地方,我尝试为日常 Ruby 编程构建一组实际有用的功能工具特征: *注意,请参阅 spec/arrows/proc_spec.rb 以了解如何使用此垃圾功能组合如果给定 x -> F -> y 和 y -> G -> ...

    rawline:RawLine是100%Ruby库,能够提供ReadLine提供的某些功能,以及其他功能,例如将字符绑定到特定键或键序列的更直观的方法

    RawLine RawLine的创建是为了提供ReadLine库的100%Ruby替代品,它提供了一些最受欢迎的功能,例如: ...editor.completion_proc = lambda做| word | 如果单词['select','update','delete','deb

    如何利用Ruby简单模拟Lambda演算详解

    最近在学习lambda演算的相关内容,由于资料不全,学习的过程很是痛苦,下面这篇文章主要给大家介绍了关于如何利用Ruby简单模拟Lambda演算的相关资料,需要的朋友可以参考借鉴,下面来随着小编一起学习学习吧。

    ruby基础教程(第四版)第21章 Proc类1

    1.lambda的参数检查更加严密,如果参数数量不正确,lambda会产生错误 1. opt 可省略的变量 2. :req 必须的变量 3. :rest 以*a

    详解Ruby中的代码块对象Proc

    inc = lambda {| x | x + 1 } inc.call(2) #=> 3 # 法三 inc = ->(x) { x + 1} inc.call(2) #=> 3 # 法四 inc = proc {|x| x + 1 } inc.call(2) #=> 3 除了上面的四种之外,还有一种通过&操作符的方式,将代码块与...

    if:在 Ruby 中实现 if 而不使用关键字

    该库在 Ruby 1.8.7 及更高版本上进行了测试,但受益于 Ruby 1.9 的哈希和 lambda 文字语法。 "truthy" . if -> { "I'm true!" } , else : -> { "I'm false!" } # vs. "truthy" . if proc { "I'm true!" } , :else ...

    Core-Ruby-1:2014 年 10 月开始的 Core Ruby 课程的报告

    Lambda 与 Proc 语义。 捆绑。 例外。 4 核心。 模块功能。 需要与负载。 高级枚举。 枚举器。 正则表达式。 5 单例类。 动态方法定义。 不要作恶:class_eval 和 instance_eval。 常量、实例变量 API。 6 ...

    Ruby on Rails中Rack中间件的基础学习教程

    标准的rack程序是一个可以响应call的对象,可以是对象、Proc、lambda甚至是method,它接收env参数(环境对象),返回一个数组,数组包括: 状态(status),http响应状态码 可以是hash,为http的header信息 拥有...

    comp:一个向函数和方法添加功能组成的Ruby库

    一个将添加到 (包括lambda )和Ruby库。 当前版本: 1.0.0 支持的Ruby版本: 1.9.2、1.9.3、2.0、2.1、2.2 安装 gem install comp -v '~> 1.0' 或者,在您的Gemfile : gem 'comp' , '~> 1.0' 用法 require '...

    binance:用Ruby编写的Binance加密货币交换的API包装器

    币安 这是Binance交换REST和WebSocket API的非官方Ruby包装器。 注意 我们现在是1.0,并且有一些重大更改,主要是一些方法名称和键的大小写。 当我编写更好的文档时,请确保...将proc或lambda传递给事件处理程序 支持

Global site tag (gtag.js) - Google Analytics