Block 不是对象,是Ruby的语言特性,近似于闭包(Closure)。
范例:
def meth
res= yield
"Block called returns #{res}"
end
puts meth do next “next_value” end #Block called returns next_value
puts meth do break “break_value” end # break_vcowcuo错误哦alue
def my
meth do return “reutnr_value” end
end
puts my () # return_value
红色部分就是 Block.
block 之 next
block中的 next [value] 导致 block结束,并返回[value]给调用函数。
block 之 break
block中的 break [value] 导致 block结束,并导致调用block的函数也返回,返回值是[value]。
block 之 return
block中的 return [value] 导致 block结束,并导致定义block的函数返回,返回值是[value]。
Proc
Proc 是Ruby 对 block的面向对象的封装。
范例:
def meth (&proc)
res= proc.call
"Proc called returns #{res}"
end
puts meth do next “next_value” end #Proc called returns next_value
puts eth do break “break_value” end # 出错
def my
meth do return “reutnr_value” end
end
puts my () # return_value
红色部分就是 Proc.
Proc 之 next
Proc中的 next [value] 导致 Proc结束,并返回[value]给调用函数。
block 之 break
Proc中不能使用break,这回导致异常。
block 之 return
Proc中的 return [value] 导致 Proc结束,并导致定义Proc的函数返回,返回值是[value]。
Lambda
Lambda 是Ruby 对 Proc进一步的封装。
范例:
def meth (&proc)
res= proc.call
"Lambda called returns #{res}"
end
def my
meth (&lambda do return “reutnr_value” end)
end
puts my () # Lambda called returns return_value
红色部分就是 Lambda.
Lambda 和 Proc的区别就在 Lambda中的 return 导致 lambda 函数结束,并返回调用lamdad的函数(Proc和Block都是从定义的它们的函数放回)
Block,Proc,Lambda的区别总结
- Block 中 用next从自身返回,用break从调用它的函数中返回, 用 returnc从定义它的函数中返回;
- Proc 是对Block的面向对象封装,不支持breaky用法 ;
- lambda是对Proc的封装, Lambda中return等同于next;
分享到:
相关推荐
在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...
- 闭包:块可以捕获其定义时的作用域内的变量,形成闭包,这使得Ruby的回调函数和函数式编程特性得以实现。 4. **模块**: - 模块用来组织代码,提供命名空间,也可以作为混入机制,实现代码复用。 - include...
5. **块和闭包**:Ruby的块是代码段,可以通过`do..end`或`{..}`来定义。块可以与方法一起使用,形成闭包,这样就可以在方法中捕获并操作外部作用域的变量。 6. **元编程**:Ruby的元编程能力非常强大,允许在运行...
Ruby的块(blocks)和 Proc 对象是其独特之处,它们提供了简洁的回调函数和迭代器。书中会深入解释这些概念,并通过实例展示它们在实际编程中的应用。Ruby还支持闭包,这是一种强大的工具,可以捕获和存储当前环境的...
清单1展示了如何使用闭包(块)遍历一个范围并打印语句。清单2显示了一个等效的for循环,但闭包的表达更为简洁。清单3和4则演示了闭包如何接收参数并在迭代数组时进行操作,如转换每个元素的大小写或构建新的字符串...
8.2对字符串和块进行求值268 8.3变量和常量271 8.4方法272 8.5钩子方法277 8.6跟踪279 8.7OBJECTSPACE和GC281 8.8定制控制结构281 8.9缺失的方法和常量284 8.10动态创建方法287 8.11别名链290 ...
此外,Ruby的块和 Proc 对象可以用来实现闭包,这对于函数式编程非常有用。 在"汉化的属性文件"这个上下文中,`locale.properties`可能是一个用来存储不同语言和地区设置的文件,常见于国际化的应用中。在Ruby中,...
书中还将详细介绍Ruby的块(block)、Proc 和 Lambda,这些都是Ruby实现回调和闭包的关键工具。通过它们,你可以编写出更简洁、更具表达力的代码。此外,Ruby的迭代器和集合操作,如map、reduce、select等,提供了...
你还会接触到Ruby的控制结构,如条件语句(if/else)和循环(for、while、each)。此外,你可能还会学习如何使用Gem来增强你的项目,以及如何调试和测试Ruby代码。 总的来说,Ruby语言提供了丰富的工具和功能,适合...
在函数式编程方面,Ruby也提供了一些支持,如闭包和高阶函数。这些特性可以帮助程序员写出更简洁、更可读的代码。书中会详细阐述如何使用这些功能来提升代码质量。 Ruby标准库非常丰富,书中可能还会涉及一些常用的...
8. **闭包和块**:Ruby中的块和闭包是重要的概念,它们允许函数或方法捕获和操作外部变量,是实现函数式编程风格的关键。 9. **正则表达式**:Ruby内置了强大的正则表达式引擎,提供了丰富的匹配和替换功能。 10. ...
4. **Ruby中的块和 Proc**:掌握Ruby中的块(blocks)和Proc对象,以及它们在迭代器和闭包中的应用。 5. **Gem生态系统**:了解Ruby的包管理工具Gem,如何通过Gem来安装和管理第三方库,以及Gemfile的使用。 6. **...
3. 闭包:Ruby的块具有闭包特性,能记住其定义时的作用域,即使在其他地方调用也能访问到。 五、Gem与Ruby生态系统 Ruby的库通常以Gem的形式存在,通过`gem install`命令安装。RubyGems是管理这些Gem的工具,它提供...
3. **块和闭包**:Ruby的块是代码块的抽象,可以与方法一起使用,常用于迭代或条件判断。闭包则是可以捕获其作用域内的变量并带出的代码块,它们在函数式编程中非常有用。 4. **元编程**:Ruby的元编程能力强大,...
- Ruby中的函数定义使用`def`关键字,可以接收参数,并支持默认值、可变数量的参数和块参数。 - 方法调用可以使用点操作符或括号,根据上下文自动推断。 4. **类和对象** - Ruby是纯面向对象的语言,一切皆为...
另外,Ruby的块(Block)和块语法是其独特之处,可以用于迭代、回调和延迟执行等功能。 Ruby的控制结构包括条件语句(如if/else、case)、循环(如while、for、until)以及异常处理(如begin/rescue/ensure)。Ruby...
3. **块、迭代器和闭包**:Ruby中的块是代码段,可以与方法配合使用,通过`do..end`或`{..}`来定义。块可以转化为Proc对象,实现闭包特性,这在函数式编程中非常有用。 4. **元编程**:Ruby提供了强大的元编程能力...
Ruby的块、Proc和Lambda都是闭包的实现形式。 八、元编程 Ruby的元编程能力强大,允许在运行时修改类和对象。`class 用于自定义类的元类,`method_missing`方法可以捕捉未定义的方法调用,从而实现动态行为。 九...
Ruby还支持闭包,这是通过块、Proc和Lambda实现的,使得函数能够记住其定义时的作用域。 Ruby的标准库非常强大,包含了大量实用的模块,如文件操作、网络通信、正则表达式、日期和时间处理等。Ruby还有强大的元编程...