Ruby中 respond_to? 和 send 的用法
原文:
http://fujinbing.iteye.com/blog/1125990
如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。
但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误:
1.
> obj = Object.new
2.
> obj.talk
3.
4.
undefined method 'talk' for #<Object:0x12345678> (NoMethodError)
因为obj对象没法响应talk这个消息,如果使用 respond_to? 这个方法,就可以实现判断对象能否响应给定的消息了:
1.
obj = Object.new
2.
if obj.respond_to?("talk")
3.
obj.talk
4.
else
5.
puts "Sorry, object can't talk!"
6.
end
这样即使obj不能响应talk,也不会使代码产生错误退出,我们也可以应用 respond_to? 方法,根据对象的属性,在程序运行时灵活的控制。
与 respond_to? 相对应,send 方法和点操作符一样,用来给对象发送消息,比如文章开始的 str.upcase ,用 send 可以写成 str.send("upcase"),它们实现的功能是完全相同的,那么为什么还要用send呢?
这是因为,send 发送的消息,在程序运行时是可变的,我们可以根据不同的输入,动态的向对象发送不同的消息。
比如一个图书管理系统,每本书都有诸如作者、出版社、日期、价钱这些,我们要根据用户的输入查询某本书的属性,如果不用send,我们要对程序的输入做一个一个的测试:
1.
print "Search for: "
2.
request = gets.chomp
3.
4.
if request == "writer"
5.
puts book.writer
6.
elsif request == "press"
7.
puts book.press
8.
elseif request == "date"
9.
puts book.date
10.
......
如果用send方法的话,就简单多了:
1.
request = gets.chomp
2.
3.
if book.respond_to?(request)
4.
puts book.send(request)
5.
else
6.
puts "Input error"
7.
end
这样不用在逐个对用户的输入进行测试,只要查询对象能否相应这个消息,再用send将输入直接发送给对象即可。
通过 respond_to? 和 send 这两个方法,我们可以构造更灵活和稳定的程序。
分享到:
相关推荐
标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...
HTML2UBBMaxcj 是一款专为Softii论坛设计的转帖工具,它主要用于将HTML格式的帖子内容转换成UBB代码,以便在论坛中更好地显示和分享。UBB(Universal BBCode)是一种轻量级的标记语言,常用于网络论坛,与HTML类似,...
转帖过程中,工具通常会自动保留原帖的格式和内容完整性,包括文字、图片、链接等元素,确保转帖后的帖子与原文一致。 一键8经验签到是另一项便利的功能。在百度贴吧,签到可以获得经验值,用于提升用户等级,增加...
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
总之,编辑人员转帖去水印工具如Teorex Inpaint,为图像编辑提供了便利,通过其独特的算法和技术,我们可以高效地去除图片中的水印,提高内容的质量。但在使用过程中,务必遵守版权法和相关法律法规,以维护良好的...
本文将深入探讨“一键转帖功能插件”在帝国CMS 6.0系统中的应用与实现,该插件适用于GBK及UTF-8编码环境,旨在提升网站内容的分享与传播效率。我们将从安装步骤、工作原理、可能遇到的问题以及解决方案等方面进行...
总结一下,"一键转帖功能插件 for 帝国CMS v1.0" 提供了一种便捷的方式来增强帝国CMS站点的社交分享功能,通过简单的安装和配置,用户可以轻松地在多个平台上转发内容,有助于增加网站的曝光度和用户的参与度。...
浮点栈结构是计算机科学中的一个重要概念,尤其是在处理器架构和编程语言实现中。本文将深入探讨浮点栈结构,特别是Intel CPU中的浮点寄存器(Float Register)使用情况。 浮点栈结构主要指的是用于存储浮点数值的...
在 Ubuntu 操作系统中,使用 aircrack-ng 工具包和 TP-LINK WN322G 网卡(ZD1211 芯片)可以轻松地捕获 WPA 握手包。 二、步骤 1. 确保开机后无线网卡没有自动连接 AP 网络连接图标->鼠标右键->编辑连接->把无线...
UBB转帖王是一种插件,它能够帮助用户快速去除复制下来的网页内容中的无用空格、文字干扰码、水印和空行等,优化复制内容,便于分享和阅读。 【其他浏览器解决方案】 除了火狐,其他浏览器如搜狗、遨游和世界之窗也...
标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...
X2转帖工具、采集工具”是针对这个平台设计的辅助软件,主要用于帮助论坛管理员或用户批量发布帖子和采集内容,提高论坛内容更新的效率。 一、批量发帖功能 1. 自动化发布:此工具可以自动化地创建和发布帖子,...
图形系统开发基础,我是转帖的,感觉不错,属于入门级别。 1:搭建Linux下的图形系统开发环境 图形输出在嵌入式开发中,多数是向FrameBuffer中写数据,然后会显示在LCD中,在Linux下做图形开发的时候,需要模拟各种...
4.cookie记录替换和新增关键词(避免每次打开转帖工具都要输入繁琐的替换关键词) 5.新增按颜色屏蔽干扰码 6.新增减少缩进以及优化了首行缩进 7.优化一些小细节 8.重新布局优化显示及方便操作 9.不断更新中...
转帖PLCDCSFCS三大控制系统的特点和差异 PLC、DCS、FCS 三大控制系统是自动化技术中的热点,各有其特点和差异。下面对这三大控制系统的特点和差异进行分析。 1.PLC(Programmable Logic Controller) PLC 是一种...
4. **日志记录**:为了便于管理和跟踪,插件可能还会记录转帖操作,生成日志供管理员查看,以便了解转帖历史和排查问题。 5. **兼容性**:作为正式版插件,它应该经过了严格的测试,与 PHPwind 7.5 版本保持良好的...
转帖图片提取工具可以对论坛...转帖图片提取工具使用方法: 将IP138上处理过的东西复制到上方的编辑框内,点击只要图片,下面的编辑框就出现结果,点击 复制结果 就可以把内容复制到剪切板中 转帖图片提取工具截图
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这些模式为程序员提供了一种标准化的方式,以便在面向对象编程中有效地组织和构建代码,提高代码的可读性、可维护性和...
1. 定义一个Generator方法,它接受三个参数,分别代表起始柱、目标柱和辅助柱。 2. 在Generator方法内,首先检查圆盘数量n是否为1,如果是,则直接将圆盘从起始柱移动到目标柱,这是递归的基础情况。 3. 如果n大于1...
数学归纳法是数学中一种重要的证明方法,主要用于证明与正整数相关的命题。该方法源于法国数学家费马的观察,他在研究形如\(2^n + 1\)的数(费马数)时,通过归纳推理提出了一个猜想,即所有这些数都是质数。然而,...