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 这两个方法,我们可以构造更灵活和稳定的程序。
分享到:
相关推荐
论坛转帖工具 .......... 纯HTML
Html2UBBMaxcj_Softii论坛专用转帖工具
一键转帖 一键8经验签到. 绿易贴吧工具3.7 11.11版.rar
1分钟内抓到WPA握手包的方法!转帖的!!不是原创!!
编辑人员转帖去水印工具,很好用,直接选中水印区域后运行伪装即可!
This is a document about float register on intel cpu.
转帖PLCDCSFCS三大控制系统的特点和差异.doc
图形系统开发基础,我是转帖的,感觉不错,属于入门级别。 1:搭建Linux下的图形系统开发环境 图形输出在嵌入式开发中,多数是向FrameBuffer中写数据,然后会显示在LCD中,在Linux下做图形开发的时候,需要模拟各种...
转帖性能测试
帝国CMS 6.0一键转帖功能插件V1.0 使用方法: 1.上传 copyto.js copyto.php 到根目录 2.内容页适当位置加入HTML.TXT中的代码 3.重新生成内容页
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
4.cookie记录替换和新增关键词(避免每次打开转帖工具都要输入繁琐的替换关键词) 5.新增按颜色屏蔽干扰码 6.新增减少缩进以及优化了首行缩进 7.优化一些小细节 8.重新布局优化显示及方便操作 9.不断更新中...
VC中实现的生产者和消费者问题的算法。此为转帖,算法讲的不错。
转帖图片提取工具可以对论坛...转帖图片提取工具使用方法: 将IP138上处理过的东西复制到上方的编辑框内,点击只要图片,下面的编辑框就出现结果,点击 复制结果 就可以把内容复制到剪切板中 转帖图片提取工具截图
discuz X2转帖工具、采集工具,discuz论坛批量发帖,批量转帖工具
这是一个世界编程大赛第一名写的程序,很好玩的,大家试试看。
转帖第五届全国高中数学青年教师观摩与评比活动 数学归纳法 安徽赵亮PPT课件.pptx
转帖第五届全国高中数学青年教师观摩与评比活动 数学归纳法 安徽赵亮PPT学习教案.pptx
gl8雨刮维修以及调试转帖.doc
使用方法: 1.上传 copyto.js copyto.php 到根目录 2.内容页适当位置加入HTML.TXT中的代码 3.重新生成内容页