Proc和Lambda的区别在网上没找到能说明白的文字
写写我自己的理解吧以免得忘记了还要再想
D:\>qri Proc
------------------------------------------------------------ Class: Proc
+Proc+ objects are blocks of code that have been bound to a set of
local variables. Once bound, the code may be called in different
contexts and still access those variables.
D:\>qri lambda
---------------------------------------------------------- Kernel#lambda
proc { |...| block } => a_proc
lambda { |...| block } => a_proc
------------------------------------------------------------------------
Equivalent to +Proc.new+, except the resulting Proc objects check
the number of parameters passed when called.
Proc和lambd都相当于定义一个代码块,然后这个代码块可以在需要用到的时候通过call(x,y,*z)来唤醒,但是他们的区别在于Proc中的代码影响到当前调用它的方法,而lambd中的代码只会在自己的代码块中起作用,如下一个广为传播的例子能够解释,我这里引用一下.
def foo
f = Proc.new { return "return from foo from inside proc" }
puts f.call #call的时候已经执行了return,所以foo方法执行完毕
return "return from foo"#不会执行到这一句
end
def bar
f = lambda { return "return from lambda" ;puts "continue?"}
puts f.call #return只在(lambda)f这个块中返回,它后面这句puts "continue?"不会执行到
return "return from bar"#这句话还会执行到,因为lambda中的return并没有影响到bar方法
end
puts foo
输出
return from foo from inside proc
puts bar
输出
return from lambda
return from bar
分享到:
相关推荐
在规则引擎中,Ruby 的闭包使用特别频繁,而且有 block,Proc和 lambda 等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下 Ruby 的闭包,特别是 block,proc 和 lambda 几种用法的异同,这次的...
主要介绍了Ruby中proc和lambda的两个区别,本文讲解了在proc和lambda中,return关键字有不同含义、检查参数的方式不同两个重要区别,需要的朋友可以参考下
开源项目-jasonmoo-lambda_proc.zip,在go中运行aws lambda函数的伴随进程
闭包(Closure),是指未绑定到任何对象的自由代码,闭包中的代码与任何对象和全局变量无关,只与执行此段代码的上下文相关。 今天我们简要的看一下ruby中的闭包实现。 Ruby中的闭包实现有:Block,Proc,Lambada。 ...
《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合... Method、proc、lambda和closure 类和模块 反射和元编程
在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...
在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...
当使用大量 proc 时,命名它们可能会很方便。 它使以后更容易识别它们。 有关使用命名过程的示例,请参阅 gem! 安装 添加到 Gemfile: gem 'named_proc' 命名特效 一个命名的 proc 就像一个普通的 proc,但它有...
除了 Haskell 过于通用且几乎难以接近的地方,我尝试为日常 Ruby 编程构建一组实际有用的功能工具特征: *注意,请参阅 spec/arrows/proc_spec.rb 以了解如何使用此垃圾功能组合如果给定 x -> F -> y 和 y -> G -> ...
nci-seronet-proc-layers
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 除了上面的四种之外,还有一种通过&操作符的方式,将代码块与...
1.lambda的参数检查更加严密,如果参数数量不正确,lambda会产生错误 1. opt 可省略的变量 2. :req 必须的变量 3. :rest 以*a
币安 这是Binance交换REST和WebSocket API的非官方Ruby包装器。 注意 我们现在是1.0,并且有一些重大更改,主要是一些方法名称和键的大小写。 当我编写更好的文档时,请确保...将proc或lambda传递给事件处理程序 支持
最近在学习lambda演算的相关内容,由于资料不全,学习的过程很是痛苦,下面这篇文章主要给大家介绍了关于如何利用Ruby简单模拟Lambda演算的相关资料,需要的朋友可以参考借鉴,下面来随着小编一起学习学习吧。
标准的rack程序是一个可以响应call的对象,可以是对象、Proc、lambda甚至是method,它接收env参数(环境对象),返回一个数组,数组包括: 状态(status),http响应状态码 可以是hash,为http的header信息 拥有...
价值评估将任意值包装到可同步事件中。 事件的同步结果是原始值,但有两个例外:... By default, syncing on a procedure syncs to the return value> (define proc (lambda () (+ 2 2)))> (sync (value-evt proc))4
RawLine RawLine的创建是为了提供ReadLine库的100%Ruby替代品,它提供了一些最受欢迎的功能,例如: ...editor.completion_proc = lambda做| word | 如果单词['select','update','delete','deb