在论坛讨论问题,自己写体会抄回来
常用到的场合:
1. scope 当需要动态参数时
scope :aged_0, lambda{ where("created_at IS NULL OR created_at < ?", Date.today + 30.days).joins(:owner) }
scope :aged_1, lambda{ |d_time|where("created_at IS NULL OR created_at < ?", d_time).joins(:owner) }
2. rspec测试
lambda{post :create, :user => @attr}.should_not change(User, :count)
参考文献,很多推荐
http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/
http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/
block本质是匿名方法,和hash loop class recursion一样就是一个编程的工具,没有的话程序都可以写,就是特别的场合,有特别适用的地方。
那么,block匿名方法什么时候适用呢?方便理解也举个例子吧,
有两组数据,可能要进行不同处理
def cross_loop(array_a, array_b, process)
array_a.each do |element_a|
array_b.each do |element_b|
process.call(element_a, element_b)
end
end
end
cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x + y})
cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x * y})
说不用lambda行不行,当然,最基本可以在cross_loop里面调用一个函数。只不过重用的时候不好,因为没有process的参数。
当然,也可以不用lambda又动态传入process,写个process.call然后,再写些process函数也可以。
def cross_loop(array_a, array_b, process)
array_a.each do |element_a|
array_b.each do |element_b|
self.send(process, element_a, element_b)
end
end
end
def plus(a, b); puts a + b; end
def multiply(a, b); puts a * b; end
cross_loop([1,2,3], [3,4,5], 'plus')
cross_loop([1,2,3], [3,4,5], 'multiply')
只是跟block比,各有所长吧
http://innig.net/software/ruby/closures-in-ruby
分享到:
相关推荐
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法著称。Voodoo,通常指的是在软件工程中用于实现...通过深入学习和理解Ruby语言以及Voodoo框架,开发者能够提升工作效率,同时享受到Ruby的编程乐趣。
Ruby编程语言,是一种面向对象的、动态类型的脚本语言,由日本人松本行弘于1995年设计并开发。它以其简洁、优雅的语法和强大的功能深受开发者喜爱,尤其...请确保在学习过程中结合实际操作,以加深理解和提高应用能力。
此外,Ruby的块(Block)、proc(过程)和lambda(λ函数)提供了强大的匿名函数和闭包功能,使得代码更加简洁且易于理解。 Ruby的标准库非常丰富,包含大量实用的模块和工具,例如文件和目录操作、网络通信、日期...
Ruby的语法结构清晰,易于理解和编写,非常适合初学者入门。 Ruby的核心特性包括: 1. 面向对象:Ruby是一种完全的面向对象语言,每一个数据都是一个对象,包括基本类型如整数、字符串和布尔值。这意味着你可以对...
在Ruby编程语言中,`return`、`break`和`next`是三个关键的控制流程语句,它们各自有着特定的用途,特别是在处理代码块(如循环和块方法)时。下面将详细介绍这三个关键字的工作原理及其区别。 1. `return` `return...
4. **块和闭包**:Ruby中的块(Block)是一种内联函数,可以通过`do..end`或`{..}`定义,与匿名函数(Proc)和lambda类似,它们都是闭包,可以捕获并保持定义时的上下文。 5. **模块和混合**:Ruby的模块(Module)...
在"ruby_crash_week"的学习旅程中,你将逐步熟悉并掌握这些概念,通过实践项目和练习巩固理解。记得理论结合实践,多写代码,多思考,你将在短时间内对Ruby有深入的认识。祝你学习顺利,快速掌握Ruby编程!
然而,过度依赖`method_missing`可能导致代码难以理解和维护,因此应谨慎使用,并优先考虑使用`define_method`等替代方案。 总的来说,理解何时和如何使用`method_missing`和`define_method`是掌握Ruby元编程的关键...
在Ruby编程中,中断和返回是...总的来说,`return`、`break`和`next`在Ruby中都有各自独特的用途,它们在控制程序流和处理循环中断方面扮演着重要角色。理解这些关键字的区别对于编写清晰、高效的Ruby代码至关重要。
4. **块(Block)、 Proc 和 Lambda**:Ruby支持块,这是一种可以包含一组语句的结构,通常与迭代器配合使用。Proc和Lambda是Ruby中的函数对象,它们可以存储代码块并在需要时执行。理解三者之间的区别和使用场景...
3. **块、 Proc 和 Lambda**:Ruby 提供了块(block),一种代码段,常用于迭代器。Proc 和 Lambda 是可存储的代码块,可以作为参数传递,它们在行为上与块类似但有一些关键区别,如 Proc 不会检查上下文的返回语句...
标题中的“坑人”可能是指在编程...以上就是Ruby编程中可能遇到的一些“坑人”知识点,每个都值得深入理解和掌握,以便写出更高效、更健壮的代码。在学习过程中,不断实践和查阅文档是避免掉入这些“坑”的有效方法。
它的设计理念是让编程变得更加简单和愉快,使得代码更易于理解和维护。 在"anightinjapan-master"这个压缩包文件中,我们可以推测这可能是一个开源项目,以"AnightinJapan"为名,可能是关于日本文化、旅行或某种...
在Ruby编程语言中,Enumerable模块和Enumerator类是两个非常核心且强大的工具,它们为处理集合数据提供了丰富的功能。本文将深入探讨这两个概念的实现、用途以及如何在实际编程中运用它们。 首先,Enumerable模块是...