`
fantaxy025025
  • 浏览: 1311576 次
  • 性别: 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_1_9_3_core_rdocs

    9. **Proc对象**:Proc对象现在可以作为块传递,并且支持`lambda`和`proc`两种不同的行为,`lambda`更接近函数,严格检查参数数量。 10. **C API更新**:对于扩展Ruby的C库,API进行了更新和改进,以提高扩展的安全...

    ruby_1_8_6_core_rdocs

    7. ** Proc 和 Lambda**:这两种都是匿名函数,Proc 是对象,而 Lambda 更接近于传统的函数,对参数数量和返回行为有更严格的限制。 8. **Block**:Ruby 中的代码块是一种特殊的语法结构,通常与迭代器方法一起使用...

    ruby_1_9_3_core_rdocs.gz

    3. **块、 Proc 和 Lambda**:Ruby支持代码块,这是以`do..end`或`{..}`包裹的一段代码。Proc和Lambda是代码块的两种可存储形式,它们可以作为参数传递,也可以赋值给变量。Lambda更接近于函数,对参数数量和返回...

    Ruby中proc和lambda的两个区别

    在Ruby编程语言中,`Proc` 和 `lambda` 都是用来创建匿名函数或者代码块的两种方式,它们在很多方面都是相似的,但有两点重要的区别。这些差异主要体现在`return`关键字的行为以及参数检查的方式上。 首先,我们来...

    脚本编程之: ruby_bcyy_jb51.net

    3. **块、Proc和Lambda**:Ruby中的块是代码段,可以与方法一起使用,Proc和Lambda是可存储的代码块,它们之间的区别也是学习的重点。 4. **Gem和Ruby生态系统**:Ruby的库和工具通常以Gem的形式发布,介绍如何安装...

    ruby_知识库pdf

    这篇“ruby_知识库pdf”很可能包含了关于Ruby语言的深入讲解,包括基础概念、核心特性、类与对象、模块、方法、块、 Proc 和 Lambda、变量作用域、控制结构、异常处理、标准库、Gem包管理以及可能的Rails框架等内容...

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

    标签中的“ruby”,“lambda”,“lambda演算”,“ruby proc”,“lambda”都与文章主题紧密相关。Ruby Proc对象可以用来表示匿名函数,这与Lambda演算中的无名函数概念相吻合。 在文章的部分内容中,作者首先提到...

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

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

    函数式-确定性-Ruby取笑___下载.zip

    10. **Proc和Lambda**:两者都是Ruby中的匿名函数,Proc更灵活,而Lambda更接近于函数的行为,如检查参数数量和强制返回。 通过这些函数式编程技术,Ruby程序员可以编写出更加简洁、可读性强的代码,同时减少错误的...

    RubyNotesForProfessionals.zip_Ruby编程_Ruby_

    Proc和Lambda是可存储的代码块,它们像函数一样可以被传递和调用,区别在于 Proc 不像Lambda那样严格检查参数数量和返回行为。 4. **闭包**: 在Ruby中,Proc和Lambda都是闭包,能够捕获其定义时的作用域中的变量,...

    named_proc:命名 procs 和 lambdas

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

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

    理解Proc和`lambda`的区别以及如何使用它们是Ruby编程中的重要概念,这有助于编写更灵活和可维护的代码。Proc对象和闭包的特性使得我们能够在函数式编程中利用高阶函数,以及在处理回调、事件驱动编程等方面发挥重要...

    透视Ruby 1.9的Lambda函数

    在Ruby 1.9之前,创建Lambda函数的方式较为繁琐,如使用`Proc.new`或`lambda`。Lambda与Block相似,但有一些重要的区别,例如Lambda在处理参数数量不匹配时会抛出异常,而Block则会尝试适应。此外,Lambda对return...

    ruby_crash_week

    10. **块、Proc和Lambda**:Ruby中的块是一段可以传递给方法的代码,通常以`do..end`或`{..}`包裹。Proc和Lambda是块的两种可存储形式,它们可以作为参数传递,也可用作返回值。 在"ruby_crash_week"的学习旅程中,...

    Ruby_Assignments:来自Juhomi的Ruby分配

    10. **块、proc和lambda**:块是Ruby中的代码片段,常用在迭代器中,如`each`;`Proc`和`Lambda`是可调用的对象,它们可以捕获上下文并作为参数传递。 "Juhomi的Ruby分配"可能涵盖以上这些概念,并通过实际的编程...

    Ruby_Practice:只是一些Ruby练习

    可以有参数,也可以使用默认值、可变数量的参数和块(Proc或Lambda)。 5. **类与对象**: - **类**:Ruby是面向对象的语言,所有数据都是对象。类定义了对象的属性(实例变量)和行为(方法)。 - **继承**:...

    ruby_projects

    3. **块、 proc 和 lambda**: Ruby提供了块(block)、Proc对象和Lambda表达式,这些都是处理代码片段的方式。块是通过`do..end`或花括号`{}`定义的,Proc和Lambda可以捕获这些块,作为可存储和传递的函数对象。 4....

    ruby_dsl_talk_companion:Aman King 的演讲“Simple Ruby DSL Techniques”的代码伴侣

    5. **块和 Proc/Lambda**:Ruby的块是实现DSL的常见工具,它们可以作为参数传递,用于定义行为。Proc和Lambda允许我们将代码块封装起来,以便稍后执行。 6. **方法定义**:通过`define_method`和其他元编程技术,...

Global site tag (gtag.js) - Google Analytics