`
Jan
  • 浏览: 158553 次
  • 性别: Icon_minigender_1
  • 来自: Hangzhou
文章分类
社区版块
存档分类
最新评论

Ruby 1.9 (4): block和proc,以及异常

阅读更多
题外: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中的block、proc、lambda区别总结

    在规则引擎中,Ruby 的闭包使用特别频繁,而且有 block,Proc和 lambda 等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下 Ruby 的闭包,特别是 block,proc 和 lambda 几种用法的异同,这次的...

    Ruby程序设计语言 (涵盖Ruby 1.8和1.9)源代码

    《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合那些想要挑战对这门语言的理解并更深入掌握它的Ruby程序员。本书...

    Ruby中使用Block、Proc、lambda实现闭包

    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中...

    Ruby中的Proc类及Proc的类方法Proc.new的使用解析

    用Proc类可以用Proc.new来创建一个Proc类,进而来操作块,这里我们就来进行Ruby中的Proc类及Proc的类方法Proc.new的使用解析.

    Ruby编程语言pdf

    在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...

    libproc:与libproc.dylib的低级绑定

    与libproc.dylib的低级绑定介绍该模块包含有关libproc.dylib共享库有趣部分的描述和包装。 该库公开有关OS X进程的内部内核数据。它是使用i386体系结构在OS X 10.7.5上开发和测试的。 由于该库没有详细记录,因此从...

    Ruby编程语言

     5.6异常和异常处理154  5.7BEGIN和END165  5.8线程、纤程和连续体166  第6章方法、PROC、LAMBDA和闭包175  6.1定义简单方法177  6.2方法名180  6.3方法和圆括号183  6.4方法参数185  6.5PROC和LAMBDA192 ...

    linux内核参数修改

    linux内核参数修改 linux 内核 参数 修改 /proc/sys/kernel/shmall 该文件是在任何给定时刻系统上可以使用的共享内存的总量(以字节为单位)。 缺省设置:2097152 /proc/sys/kernel/shmax 该文件指定内核所允许的...

    使用ADO处理存储过程VC源代码:stored_proc_using_ado

    使用ADO处理存储过程源代码:stored_proc_using_ado 关键字:stored_proc_using_ado,存储过程

    proc-tools:从各种 proc 读取数据

    proc-工具 从各种/proc/:pid/*文件描述符中读取数据。 安装 $ npm install proc-tools --save 用法 获取进程的/proc/:pid/status 。 var status = require ( 'proc-tools' ) . status status ( process . pid , ...

    详解Ruby中的代码块对象Proc

    在Ruby中一个代码块block不是对象,但可以用Proc来替代其作为对象进行操作,接下来我们就来详解Ruby中的代码块对象Proc

    查看opensuse硬件信息

    spring@linux-njgq:~> cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 18 model : 1 model name : AMD A6-3400M APU with Radeon(tm) HD Graphics stepping : 0 cpu MHz : 1397.500 cache ...

    linux内核知识系列:Proc

    linux内核知识系列:Proc 华嵌智能提供 www.embedded-cn.com http://embedded-cn.taobao.com

    async_tcpsocket:Ruby 的异步 TCP 套接字

    #AsyncTCPSocket ##Ruby 异步 TCP 套接字实现 ###Example require 'async_tcpsocket'socket = AsyncTCPSocket . newsocket . once :error , Proc . new { | err |STDERR . puts "Error: #{ err } "socket . close}...

    nim-crosscompile:使用此proc在Linux上将Nim源代码交叉编译为多个目标

    nim-crosscompile:使用此proc在Linux上将Nim源代码交叉编译为多个目标

    hazelnut:用于解析procmeminfo的pythonic库

    hazelnut是APACHE许可的库,它使用Python编写,旨在提供一种简单且Pythonic的方式来解析基于LINUX的系统上的/ proc / meminfo文件。 该库已经过Python 2.7.x和Python 3.6.x的测试。 安装: 从源使用 $ python ...

    uproc:用户空间proc文件系统

    uproc每个路径名都与两个处理程序相关联,这两个处理程序分别处理读取和写入系统调用。 处理程序的形式为: /* * @buf: For read request, @buf stores the buffer into which data should be written by your ...

    Core-Ruby-1:2014 年 10 月开始的 Core Ruby 课程的报告

    Rbenv/Ruby 安装程序和 Git 设置。 基本 Ruby 类型简介。 1 深入了解数组、哈希、字符串、符号、数字。 Ruby块。 数不胜数,这一切都是魔法。 2 面向对象介绍。 类、模块和常量。 方法解析查找和祖先链。 ...

    proc学习proc学习

    proc学习proc学习proc学习proc学习proc学习proc学习

Global site tag (gtag.js) - Google Analytics