`
vivimusing
  • 浏览: 81424 次
  • 性别: Icon_minigender_1
  • 来自: 台州
社区版块
存档分类
最新评论

lambda 和 Proc.new 的细微区别

阅读更多

 

def some_method
	lambda_proc = lambda { return "from lambda"}
	
	proc_new_proc = Proc.new { return "from Proc.new"}
	
	lambda_proc.call
	proc_new_proc.call
end

puts some_method

#得到个结果是:
#from Proc.new

 

 lambda更像是创建一个佚名的函数。

而Proc.new更像是在代码中多添加那么几行代码。

分享到:
评论
7 楼 gift5168xf 2010-01-24  
除了next,next是仅仅终止block,并返回它的值。next对所有的定义block的方式都一样。若非要用Proc.new来得到block返回值,而不对它的context有所影响应就应该用next。至于return看这里
6 楼 check 2009-07-17  

我印象里python 3取消了匿名方程,所以我觉得这么钻牛角尖意义不大

lambda evaluation以前是作为一种图灵等价提出来的,后来的FP喜欢这种风格。而Proc.new显然是ruby的reflexive一面,两者立足点不同,只是“碰巧”都定义一个过程,实现上有些细微区别,但是我个人认为,即不关键也不值得拿来讨论。反正你编程的时候如果牵涉了这个级别的行为区别,证明你的代码可读性已经出问题了。
5 楼 Hooopo 2009-07-14  
额,其实1.8.6里面proc和lambda的是一个意思...1.9改成了proc和Proc.new一个意思.
proc和lambda的行为方式更像是方法(method-like),而Proc.new的行为方式更像是Block(block-like),就是楼主说的更像是在那加几坨代码,但楼主的例子并不能说明这个...
proc和lambda的细微差别除了lgn21st给的链接里面写的对return的处理有区别还体现在对break的处理有区别..

def foo
 block_like = Proc.new{break "break!"}
 block_like.call
 puts "code here.."
end

# => proc_lambda.rb:2:in `call': break from proc-closure (LocalJumpError)
def bar
 method_like = lambda{break "break!"}
 method_like.call
 puts "code here .."
end
# => code here ..


4 楼 ruby-rails 2009-01-30  
<div class="quote_title">vivimusing 写道</div>
<div class="quote_div">
<p> </p>
<pre name="code" class="ruby">def some_method
lambda_proc = lambda { return "from lambda"}

proc_new_proc = Proc.new { return "from Proc.new"}

lambda_proc.call
proc_new_proc.call
end

puts some_method

#得到个结果是:
#from Proc.new

</pre>
<p> </p>
<p> lambda更像是创建一个佚名的函数。</p>
<p>而Proc.new更像是在代码中多添加那么几行代码。</p>
</div>
<p>什么就是代码中多添加了那麽几行?不懂你的意思<img src="/images/smiles/icon_surprised.gif" alt="" /></p>
<p> </p>
<p>这个例子不就是说明Proc.new在return的时候不会被拦截,lambda会被拦截嘛。</p>
<p> </p>
<p>除了这个,还有个就是检查参数个数和类型的区别。</p>
3 楼 vivimusing 2009-01-30  
楼上的那个例子更能说明我遇到的这个问题吧。
lambda中包含了一个return,把这个佚名函数中断掉,返回到调用这个佚名函数的代码中去;
而Proc.new 中包含一个return,如我那个例子将把some_method中断掉,返回到调用some_method的代码。
2 楼 lgn21st 2009-01-30  
<div class="quote_title">vivimusing 写道</div>
<div class="quote_div">
<p> </p>
<pre name="code" class="ruby">def some_method
lambda_proc = lambda { return "from lambda"}

proc_new_proc = Proc.new { return "from Proc.new"}

lambda_proc.call
proc_new_proc.call
end

puts some_method

#得到个结果是:
#from Proc.new

</pre>
<p> </p>
<p> lambda更像是创建一个佚名的函数。</p>
<p>而Proc.new更像是在代码中多添加那么几行代码。</p>
</div>
<p> </p>
<p>你的结论"而Proc.new更像是在代码中多添加那么几行代码。"是从何而来?这就是lambda和Proc.new的细微区别么?</p>
<p> </p>
<p>基本上,lambda和proc是一个东西,都是Kernel的方法,他们兄弟俩基本可以等同于跟Proc.new,除了ruby文档上已经提到差别外,还有一点在<a href="http://samdanielson.com/2007/3/19/proc-new-vs-lambda-in-ruby">这里</a>的例子中已经说的非常清楚了.</p>
<p> </p>
1 楼 yb31 2009-01-30  
完全看不懂lz这例子想说明什么

相关推荐

    开源项目-jasonmoo-lambda_proc.zip

    Lambda Proc通过提供一套API和工具,使得在Lambda上下文中启动和管理这些伴随进程变得更加容易。这可能包括启动守护进程、监控进程状态、传递数据以及在进程间建立通信通道等。 以下是Lambda Proc的一些关键知识点...

    lambda-dg.pdf

    为了监控和故障排除,AWS Lambda 提供了日志和监控功能,允许开发者访问 CloudWatch Logs 和 CloudWatch Metrics。Dead Letter Queues(死信队列)用于捕获 Lambda 函数执行过程中发生的错误。错误信息被放入队列中...

    C#lambda表达式入门.pptx

    通过多个示例详细演示了.Net中C#语言lambda表达式的基本用法,主要包括三个方面内容: 1.什么是lambda表达式 2.理解lambda表达式 3.使用lambda表达式

    Python库 | aws-cdk.aws-lambda-1.25.0.tar.gz

    通过aws-cdk.aws-lambda-1.25.0,我们可以用Python轻松地创建、配置和部署Lambda函数,实现对AWS服务的灵活集成和自动化操作。 1. **安装与导入**: 安装aws-cdk.aws-lambda库,可以通过pip命令进行: ``` pip ...

    PyPI 官网下载 | mypy-boto3-lambda-1.17.48.0.tar.gz

    总的来说,“mypy-boto3-lambda-1.17.48.0.tar.gz”提供了一种高效且类型安全的方式来管理和操作AWS Lambda,是Python开发者在处理Lambda任务时的有力工具。通过结合mypy的静态类型检查和boto3的AWS集成,它提升了...

    Python库 | mypy-boto3-lambda-1.17.58.0.tar.gz

    标题中的"mypy-boto3-lambda-1.17.58.0.tar.gz"是一个针对Python开发的库,这个库集成了mypy、boto3和Lambda相关的功能。让我们详细了解一下这些关键组成部分。 **mypy**: mypy是Python的一个静态类型检查工具。在...

    Python库 | aws-cdk.aws-lambda-1.32.2.tar.gz

    Python库aws-cdk.aws-lambda-1.32.2.tar.gz是AWS Cloud Development Kit (CDK)的一个组件,专门用于构建和管理AWS Lambda函数。这个压缩包包含了版本1.32.2的库,Lambda在AWS服务生态中扮演着核心角色,它是一种无...

    PyPI 官网下载 | aws_lambda-1.0.0.tar.gz

    Python库`aws_lambda-1.0.0`很可能提供了对AWS Lambda更便捷的接口和实用工具,使得开发者能够更高效地构建和部署Lambda函数。这类库通常包含以下功能: 1. **配置和管理Lambda函数**:简化创建、更新和删除Lambda...

    lambda-3.0.zip

    总的来说,LAMBDA算法是GNSS定位中的一项关键技术,通过MATLAB实现的开源版本"lambda-3.0.zip"为研究者和工程师提供了一个方便的工具,帮助他们在各种应用场景下实现高精度的定位服务。用户可以根据自身需求,结合该...

    PyPI 官网下载 | mypy-boto3-lambda-1.12.12.0.tar.gz

    《PyPI官网下载:mypy-boto3-lambda-1.12.12.0.tar.gz详析》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了大量...通过深入理解和正确使用这个库,可以显著提升Lambda函数的开发体验和代码质量。

    lambda表达式专题.pdf

    lambda表达式专题.pdf

    lambda-filter.html

    lambda-filter.html

    Python库 | aws-cdk.aws-lambda-1.6.1.tar.gz

    在本例中,"aws-cdk.aws-lambda-1.6.1"是CDK的一个特定版本,用于构建、部署和管理Lambda函数。这个版本号1.6.1表明它是CDK的一个更新,可能包含了错误修复、性能优化或者新功能。 描述中的"python库"确认了这个...

    PyPI 官网下载 | mypy-boto3-lambda-1.18.13.tar.gz

    这个版本1.18.13包含了对AWS Lambda服务的最新支持和优化,确保开发者可以更加安全、高效地编写和运行Lambda函数。 首先,让我们深入了解一下mypy。mypy是Python的一个静态类型检查工具,它允许开发者在Python代码...

    PyPI 官网下载 | aws-solutions-constructs.aws-s3-lambda-1.94.0.tar.gz

    在实际应用中,开发者可以通过Python代码引入aws-solutions-constructs库,然后利用其提供的类和方法来定义S3桶和Lambda函数的交互。例如,可以创建一个S3EventSource对象,将其附加到Lambda函数,从而建立触发关系...

    Python库 | mypy-boto3-lambda-1.17.104.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:mypy-boto3-lambda-1.17.104.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    api-lambda-app.iml

    api-lambda-app.iml

    PyPI 官网下载 | mypy-boto3-lambda-1.10.39.2.tar.gz

    描述中的“资源全名:mypy-boto3-lambda-1.10.39.2.tar.gz”再次确认了软件包的完整名称和版本号。PyPI是Python开发者发布和分享他们创建的模块、库和其他工具的地方,以便其他用户可以轻松地安装和使用这些资源。 ...

    Lambda表达式终.zip

    Lambda表达式是Java编程语言中的一个关键特性,自Java 8引入以来,它极大地简化了处理函数式编程任务的方式。Lambda表达式本质上是匿名...通过不断练习和实践,你将能够熟练掌握Lambda表达式,并将其应用到日常开发中。

    PyPI 官网下载 | mypy-boto3-lambda-1.17.78.tar.gz

    4. **mypy-boto3-lambda**:结合以上三个元素,可以推测mypy-boto3-lambda这个库可能是为了解决在使用mypy进行类型检查时与boto3库的兼容问题,或者提供额外的工具和类型定义,使得在开发AWS Lambda函数时能更好地...

Global site tag (gtag.js) - Google Analytics