`
qzriso
  • 浏览: 243018 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Proc过程对象

 
阅读更多

就是所谓的过程对象。 Proc 对象是将一组局部变量绑定到一起的代码块。一旦绑定,代码可以在不同的上下文环境中被调用且可保持对这些局部变量的访问。

Proc 是对块及其上下文环境 ( 局部变量的作用域 ) 进行对象化处理后得到的过程对象。你可以像使用匿名函数那样使用 Proc 。导入到 Proc 内的局部变量没有作用域的问题,也就是说, Proc 内的局部变量会让你得到动态局部变量的效果。

 

当我们希望向其它方法传递一块作为参数的代码,也就是说我们希望像处理数据一样处理代码时,你就应该想到 Proc 对象。

例如:

def gen_times(factor)

return Proc.new {|n| n*factor }

end

times3 = gen_times(3) # 3 赋值给 factor

times5 = gen_times(5)

 

times3.call(12) #=> 12 赋值给 n 结果为 12*3=36

times5.call(5) #=> 25

times3.call(times5.call(4)) #=> 60

 

Proc 中出现 return retry 的话,会引发 LocalJumpError 异常。

 

类方法:

(1) Proc.new {|...| block } => a_proc Proc.new => a_proc 创建一个新的 Proc 对象来绑定当前上下文环境 context Proc::new 在带有附加块的方法内部调用时,可以不带 block 块。在这种情况下,方法的块会被转发给 Proc 对象。即,把调用该方法的方法所带的块转换为 Proc 对象并将其返回。

例如:

def proc_from

Proc.new

end

proc = proc_from { "hello" }

proc.call #=> "hello"

在使用 Proc.new 时,若定义了 Proc#initialize 方法的话,就在对象初始化时调用该方法。

 

实例方法:

(1) prc.call(params,...) => obj prc[params,...] => obj 执行过程对象并将块内最后的表达式所计算出的值做为其结果返回。参数会被原样 ( 以遵守多重赋值原则 ) 赋值给块的参数。对于使用 Kernal.proc 创建的 Proc 对象,当传递给带有多个参数的 Proc 的参数数量有错误时,会生成一个错误。然而,使用 Proc.new 创建的 Proc 对象,会将额外的参数偷偷地丢弃。

例如:

a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}

a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]

a_proc[9, 1, 2, 3] #=> [9, 18, 27]

a_proc = Proc.new {|a,b| a}

a_proc.call(1,2,3) # 引发错误

produces:

prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)

from prog.rb:4:in `call'

from prog.rb:5

分享到:
评论

相关推荐

    mysql 的proc 表

    MySQL数据库中的`proc`表是存储过程和函数的元数据表,它包含了关于用户自定义的存储过程和函数的信息。这个表在MySQL的系统数据库`mysql`中,用于记录所有数据库实例上的这些对象的详细信息。`proc.frm`, `proc.MYD...

    调用存储过程入参出参为自定义对象_支持批量

    根据给定的信息,本文将详细解释如何在Java中通过调用存储过程实现带有自定义对象作为参数的大批量数据处理,并且特别关注了入参为二维数组的批量插入以及出参为自定义对象(二维数组)的情况。此外,还将讨论与...

    proc编程学习下载

    通过使用`PROC`,你可以创建存储过程、函数、触发器等数据库对象,这些对象可以直接在数据库中执行,减少网络通信,提升整体系统效率。 二、C内嵌数据库连接 1. 驱动程序安装:首先,你需要安装适用于C语言的数据库...

    proc*c c++ 编程艺术

    首先,proc*c的核心是将C语言中的过程调用转换为Oracle数据库的PL/SQL块。通过proc*c,开发者可以利用C语言的高效性,同时利用PL/SQL的数据库操作便利性。例如,你可以直接在C代码中定义和调用存储过程,减少网络...

    Proc语言简介

    Proc语言的一个关键特性是其对数据库对象的访问权限管理。通过Proc编写的存储过程可以限制特定用户的访问权限,确保数据的安全性。例如,可以创建一个只允许读取数据但不允许修改数据的存储过程。 在DB2中,使用...

    MFC调用 proc 的例子

    `Proc`在这里指的是过程调用或者存储过程,通常在数据库编程中使用,特别是与关系型数据库如Oracle交互时。 标题中的"MFC调用proc的例子"指的是一个使用MFC框架,并且集成了解析和执行Oracle数据库存储过程的功能。...

    ORACLE文档--PROC

    - **DECLARE部分**:在C/C++函数或结构体中声明数据库对象,如游标、变量、类型等。 - **BEGIN/END块**:用于封装PL/SQL代码,如EXEC SQL BEGIN DECLARE SECTION;...EXEC SQL END DECLARE SECTION;。 4. **ProC的...

    Oracle ProC

    ProC 是“Procedure C”的缩写,它允许开发人员使用标准的C语言语法来编写存储过程、函数、触发器等数据库对象。Oracle ProC 将C语言的灵活性和性能与Oracle数据库的强大功能相结合,使得开发者可以编写高性能的...

    读取/proc/cmdline 文件中的标志位信息

    其他常见的关键字包括 `quiet`(使启动过程静默)、`splash`(显示启动画面)等。了解并利用这些信息有助于系统管理员更好地配置系统环境。 #### 读取/proc/cmdline的具体步骤 1. **打开/proc/cmdline文件**: - ...

    Oracle ProC_C++编程源代码

    Oracle ProC/C++编程是Oracle数据库与C++语言结合的一种技术,它允许开发人员使用C++语言编写存储过程、函数和其他数据库对象。Oracle 11g版本提供了更加强大的ProC/C++支持,使得开发者可以利用C++的高效性和灵活性...

    Oracle 11g ProC_C++编程.rar

    Oracle 11g ProC/C++编程是数据库领域中一种高级接口,允许开发人员使用C或C++语言来编写过程化代码,与Oracle数据库进行交互。这种技术在处理复杂业务逻辑、高性能计算以及数据库内存储过程时非常有用。ProC/C++...

    Oracle_ProC.rar_linux oracle_linux proc *c_linux proc oracle_ora

    Oracle ProC是Oracle数据库提供的一种集成的C编程接口,它允许开发者使用C语言来编写存储过程、函数、触发器等数据库对象。在Linux环境下,利用ProC开发Oracle应用,可以充分利用C语言的效率和灵活性,同时享受...

    《Oracle 11g ProC/C++编程艺术》-源代码

    6. **LOB处理**:Oracle 11g对大对象(LOB)的支持在ProC中得到了体现,可以方便地读写BLOB、CLOB等大数据类型。 7. **并发控制**:ProC支持事务管理和并发控制,确保了数据库操作的一致性和完整性。 8. **性能...

    SAS]proc_Template_Styles_Tip_Sheet.pdf

    在给定文件信息中,我们可以识别出关于SAS的proc_template过程以及样式模板定义的关键知识点。SAS(Statistical Analysis System)是一种强大的数据分析系统,广泛应用于统计分析、商业智能等领域。proc_template是...

    oracle+proc+c的学习,个人看了感觉非常好,学习中。

    标题和描述中提到的“oracle+proc+c”的学习,实际上主要聚焦于Oracle数据库中的PL/SQL(Procedural Language for SQL)编程语言的学习。PL/SQL是Oracle为增强其数据库功能而开发的一种专有编程语言,它结合了SQL的...

    PROC编程培训材料

    - **数据权限语句**:用于设置数据库对象的访问权限。 - **数据完整性语句**:如`FOREIGN KEY`约束等,用于维护数据一致性。 ### 二、INFORMIX-ESQL/C基本构架 #### 1. 前导文件与蕴涵文件 - **前导文件**:通常...

    proc程序设计之基础编程

    在Oracle中,PROC编程是指编写PL/SQL过程,这是一种结构化查询语言的扩展,用于创建存储过程、函数、包、触发器等数据库对象。这些过程可以接受参数,执行一系列SQL语句和逻辑控制,然后返回结果或影响数据库状态。...

    商业编程-源码-使用ADO处理存储过程源代码 stored_proc_using_ado.zip

    这个压缩包文件"stored_proc_using_ado.zip"包含了使用ADO(ActiveX Data Objects)来处理存储过程的源代码,这对于我们理解和实现数据库交互有着重要的意义。 ADO是微软提供的一个数据访问接口,它允许程序员通过...

    coil-20-proc.zip

    描述中提到的“包含20个对象,每个对象是通过旋转5度得到71张图片”揭示了数据集的具体结构。这意味着COIL-20数据集由20个不同的物体组成,每个物体都有71张不同角度的图片。这些图片是以5度为间隔旋转的,从0度到...

    PROC与OCI程序设计

    7. 高级特性:可能涉及LOB(大型对象)操作、并发控制、存储过程调用、绑定变量、预编译语句等进阶主题。 8. 示例代码:提供完整的示例代码,帮助读者理解和实践OCI编程。 通过学习"PROC与OCI程序设计",开发者...

Global site tag (gtag.js) - Google Analytics