题外:block和proc中文怎么说? -.-
Proc#yield
新增的一个方法,让你直接调用一个block/proc,相当于Proc#call
proc = Proc.new {|a,b| a+b}
proc.yield(1,2) # => 3
修改了不带参数的block调用arity返回值
lambda{}.arity # => -1 in 1.8
lambda{}.arity # => 0 in 1.9
proc现在是Proc.new的别名
而在1.8中proc是lambda的别名, 比较
1.9中:
proc{|a,b|}.arity # => 2
proc{|a,b|}.call(1) # => nil
lambda{|a,b|}.call(1) # => ERROR: (eval):1: wrong number of arguments (1 for 2)
Proc.new{|a,b|}.arity # => 2
Proc.new{|a,b|}.call(1) # = nil
1.8中:
proc{|a,b|}.arity # => 2
proc{|a,b|}.call(1) # => ERROR: (eval):1: wrong number of arguments (1 for 2)
lambda{|a,b|}.call(1) # => ERROR: (eval):1: wrong number of arguments (1 for 2)
Proc.new{|a,b|}.arity # => 2
Proc.new{|a,b|}.call(1) # => nil
新增Proc#lambda?方法
非常实用的一个改动,让你知道一个给定的Proc对象是遵循proc语义还是lambda语义
proc{}.lambda? #=> false
lambda{}.lambda? # => true
试验失败的改动:
* 定义一个能接受block的[]方法
由于exception部分没什么大改动,并入本章讲了:
* Exception#to_str方法被取消了
* 在1.9中如果两个异常他们的 1. class相同 2.message相同 3.backtrace相同,则这两个异常被认为相等, 即==操作返回true。在1.8中对两个异常进行==你总是得到false.
...
分享到:
相关推荐
在Ruby 1.9中,Block参数现在是局部的,这意味着它们不再在Block外部可见,这增强了Block的封装性和安全性。这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的...
9. **Proc和Lambda的区别**:在Ruby 1.9中,`Proc`和`lambda`之间的区别更加明显,特别是关于`yield`的行为,`lambda`更接近于其他函数式语言中的函数行为。 10. **内建类和模块的扩展**:Ruby 1.9对很多内建类和...
3. **块、Proc和Lambda**:Ruby中的块是代码块的抽象,Proc和Lambda则可以将块转化为可存储和传递的对象。理解这些概念对于编写更灵活和模块化的代码至关重要。 4. **模块和类**:Ruby的模块用于实现命名空间和混入...
在规则引擎中,Ruby 的闭包使用特别频繁,而且有 block,Proc和 lambda 等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下 Ruby 的闭包,特别是 block,proc 和 lambda 几种用法的异同,这次的...
《Programming Ruby 1.9》是一本经典的Ruby编程语言教程,其源代码包含了大量实例和示例,旨在帮助读者深入理解Ruby的语法、特性以及编程实践。这些源代码是学习和探索Ruby语言的重要资源,涵盖了从基础语法到高级...
6. **异常处理**:Ruby的错误处理机制,如`begin-rescue-end`结构,以及自定义异常的创建和抛出。 7. **模块和混合**:模块用于组织代码,混合(mix-in)机制让类可以像继承一样吸收其他模块的方法。 8. **宝石...
《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合那些想要挑战对这门语言的理解并更深入掌握它的Ruby程序员。本书...
Ruby中的闭包实现有:Block,Proc,Lambada。 首先,我们来看Block。 代码如下: ary = [1,2,3,4] ary.collect! do |a| a*a end ary.each do |a| puts a end 这段代码,我们使用了Array对象的block方法,将ary中...
6. **错误和异常**:错误处理得到改进,新的异常类层次结构让错误分类更清晰,便于调试和异常处理。 7. **数组和哈希的改变**:数组的默认填充值为`nil`,而哈希的默认初始元素为`nil`对,这些改变影响了空数组和...
Ruby中的Proc类是用于封装代码块(block)的对象,它...总的来说,Ruby中的Proc类提供了强大的功能,允许我们将代码块作为对象进行操作,这对于实现元编程、函数式编程风格以及在各种上下文中传递和执行代码非常有用。
3. **ruby19.chm**:这个文件可能是Ruby 1.9整体API的汇总,包含标准库和核心库的综合信息,或者可能更侧重于解释语言的高级特性和最佳实践,如元编程、Gem管理、Ruby的垃圾回收机制等。 学习和理解Ruby API有助于...
在IT行业中,`/proc`系统是Linux操作系统中一个非常重要的组成部分,它提供了一个查看和交互内核状态的接口。`/proc`目录下包含了大量以文件形式存在的数据,这些文件其实并非传统的磁盘文件,而是由内核动态生成的...
学习这个资料包,你需要理解Linux内核与用户空间的交互机制,掌握如何解析`/proc`中的文件格式,以及如何通过这些信息来分析和解决实际问题。同时,这也将帮助你提高对Linux系统操作和管理的能力,对系统管理员和...
- 控制结构:Ruby中的条件语句有if/else、unless、case,循环有while、until、for以及块(block)和循环控制关键字如break和next。 - 函数与方法:Ruby中的函数定义使用def关键字,方法可以接收可变数量的参数,...
4. 输出指定变量:Proc Print 也可以输出指定的变量。例如,可以使用 `var` 语句指定要输出的变量。例如:`proc print data=mydata var=var1 var2; run;` 5. 输出数据集的汇总信息:Proc Print 还可以输出数据集的...
在Ruby编程语言中,Proc对象是用来封装代码块的类,它允许我们将块(block)作为对象来处理。Proc与块密切相关,可以通过两种方式创建Proc对象:直接使用Proc.new或者通过在方法定义中包含一个块。Proc对象可以调用`...
它支持块(block)、闭包(closure)和 Proc 对象,使得函数式编程风格得以实现。Ruby 1.9以后引入了语法糖,如缩进代替大括号表示代码块,使代码更整洁。 3. **类与对象**:在Ruby中,类是对象的蓝图,用于创建...
3. **函数与方法**:了解如何定义和调用函数,以及Ruby中的块、 Proc 和 Lambda 的使用。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,你将学习类、对象、继承、模块、封装和多态等核心概念。 5. **异常...