ruby way之高级OOP特性之二

1 把代码像对象一样存储

当你想要以对象的形式存储一块代码的时候,ruby给了你几种方法。下面我们会介绍Proc 对象, Method 对象和 UnboundMethod 对象.

内置的Proc 类包装ruby block到一个对象.Proc对象,像一个blocks,是一个闭包而且保存了它定义 时的上下文:

Ruby代码

myproc = Proc.new { |a| puts "Param is #{a}" } 
 
myproc.call(99)     # Param is 99

当一个方法接受一个&的参数,然后这个方法紧跟着一个block被调用的时候,Proc 对象就会自动 被创建:

Ruby代码

def take_block(x, &block) 
 puts block.class 
 x.times {|i| block[i, i*i] } 
end 
 
take_block(3) { |n,s| puts "#{n} squared is #{s}" }

这里要注意的是[]方法是call方法的别名。

如果你有一个Proc的对象,你可以把它传递给可以接收block的方法。只要在它前面加上&就行 了.

Ruby代码

myproc = proc { |n| print n, "... " } 
(1..3).each(&myproc)          # 1... 2... 3...

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 方法
, 代码
, block
, proc
一个
oop三大特性、oop特性、oop的三大特性、oop的特性、the ruby way 3rd pdf,以便于您获取更多的相关知识。

时间: 2024-11-18 01:55:29

ruby way之高级OOP特性之二的相关文章

ruby way之高级OOP特性之一

1 发送一条消息给一个对象 当你调用一个方法时,你也就是发送了一条消息给一个对象,在ruby中我们能够在运行时决定那个方 法被调用.send 方法就是做这个的,他接受一个symbol为参数. 举个简单的例子,假设我们要写一个排序,我们想要使用不同的域作为比较的key.虽然我们这时可以 用block,可是如果使用send的话,我们能有一个更优美的写法: Java代码 class Person attr_reader :name, :age, :height def initialize(name,

096_《Delphi5高级编程丛书之二:GUI编程》

<Delphi5高级编程丛书之二:GUI编程> Delphi 教程 系列书籍 (096) <Delphi5高级编程丛书之二:GUI编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 作者: 徐新华 出版社: 人民邮电出版社 书号: 出版日期:2000年4月 开本: 787*1092 1/16 页码: 496 版次: 2000年4月第一版第一次印刷 内容简介 本书全面深入地介绍了如何运用 Delphi 5进

Ruby的语法和语言特性总结_ruby专题

Ruby是一种解释型.面向对象.动态类型的语言.Ruby采取的策略是在灵活性和运行时安全之间寻找平衡点.随着Rails框架的出现,Ruby也在2006年前后一鸣惊人,同时也指引人们重新找回编程乐趣.尽管从执行速度上说,Ruby谈不上有多高效,但它却能让程序员的编程效率大幅提高.本文将讲述Ruby语言的基础语言特性,包括基本的语法及代码块和类的定义. 1. 基础在Ruby交互命令行中输入以下命令(>>为命令行提示符,=>为返回值:下文将把=>符号和语句写在一行内表明其返回值): &g

ruby way之动态特性之二

1 得到所定义的实体的列表 ruby的反射api能够使我们在运行时检测类和对象.因此我们下面将会介绍Module, Class, 和Object 中的定义的一些方法. Module模块有一个constants 的方法,它将会返回系统中所有的常量名,包括类名和模块名.nesting 方法则是返回当前调用点上的嵌套的模块的列表. Ruby代码 list = Math.constants # ["E", "PI"] Module#ancestors 返回指定的类或者模块的

PHP高级OOP技术演示

如果你了解基本的OOP概念,那么我将向你展示更高级的技术. 序列化(Serializing) PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象.这就是所谓的序列化机制.PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示.然而,序列化只保存了对象的成员数据而不包话方法. 在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj

Exchange 2007 新特性与二次开发

Exchange Server2007 已经面市将近一年了,相信大家一定对它的强大功能已经有所体验了,其中值得我们关注的就是Exchange Server 2007将web service的应用开发引入到CAS(Client Access Server)中,给开发人员带来了福音.现在就让我们一起来学习一下Exchange Server 2007 Web Service的新特性和它的二次开发的相关技术吧. 一. Exchange Server 2007 Web Service新特性  用Web

Flash MX 2004新特性实例学习二

    实例三.Customizing Context Menu 一.涉及特性 这个实例反映了Flash MX 2004在编程方面的重大改进.其中包括了as文件的应用,系统的_global.$clipboard变量的使用,ContextMenu(menufun) 函数的调用,ContextMenuItem()函数的调用,已经MovieClip.prototype.menu变量的使用.通过这几个函数和变量的操作,就可以轻松地操作Flash Player中的菜单了. 二.制作过程 1.新建一个Act

利用PHP的OOP特性实现数据保护

在PHP 4中,声明变量通常使用var,而在PHP 5中,可使用面向对象编程(OOP)的特性来自定义数据的可见性--即可访问性,可见性在此与变量作用域非常类似,但提供了更好的控制机制,有以下三种类型的可见性修饰符: Public(默认)--变量可在全局范围内访问或修改. Protected--变量只能在类本身及直接派生(使用extends语句)类内访问或修改. Private--变量只能在类内部访问或修改. 与接口实现类似,在程序中违反这些规则将会导致严重的错误:且与接口类似的是,它们的存在纯粹

友情链接欺骗高级手法揭露之二

交换友情链接,是大家提升网站排名,提高网站权重的最基本的手法之一. 好不容易换了一个PR高的,权重高的网站的链接,以为占了便宜,结果呢?一不小心,不仅没占到便宜,还白白给人家送去了一个单向链接. 对于友情链接欺骗,本人以前写过两篇关于欺骗手段的文章.见<让你意想不到的友情链接欺骗手段>和<友情链接欺骗高级手法揭露>,应该对于大多数链接欺骗都已经进行了披露.今天一站长跟我反映,说有友情链接作弊,但是不管是正常的链接检查工具还是本站开发的插件版的链接检查工具,都没法识别.我们一起来看一