`
jy503160
  • 浏览: 20023 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

初识Ruby之——[转]ruby 中的respond_to

    博客分类:
  • ruby
 
阅读更多

如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。

但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误
obj = Object.new
obj.talk

undefined method 'talk' for #<Object:0x12345678> (NoMethodError)

因为obj对象没法响应talk这个消息,如果使用 respond_to? 这个方法,就可以实现判断对象能否响应给定的消息了:

obj = Object.new
if obj.respond_to?("talk")
obj.talk
else
puts "Sorry, object can't talk!"
end
这样即使obj不能响应talk,也不会使代码产生错误退出,我们也可以应用 respond_to? 方法,根据对象的属性,在程序运行时灵活的控制。

与 respond_to? 相对应,send 方法和点操作符一样,用来给对象发送消息,比如文章开始的 str.upcase ,用 send 可以写成 str.send("upcase"),它们实现的功能是完全相同的,那么为什么还要用send呢?

这是因为,send 发送的消息,在程序运行时是可变的,我们可以根据不同的输入,动态的向对象发送不同的消息。

比如一个图书管理系统,每本书都有诸如作者、出版社、日期、价钱这些,我们要根据用户的输入查询某本书的属性,如果不用send,我们要对程序的输入做一个一个的测试:


print "Search for: "
request = gets.chomp

if request == "writer"
puts book.writer
elsif request == "press"
puts book.press
elseif request == "date"
puts book.date
.......

如果用send方法的话,就简单多了:

request = gets.chomp
if book.respond_to?(request)
puts book.send(request)
else
puts "Input error"
end
这样不用在逐个对用户的输入进行测试,只要查询对象能否相应这个消息,再用send将输入直接发送给对象即可。

通过 respond_to? 和 send 这两个方法,我们可以构造更灵活和稳定的程序。

分享到:
评论

相关推荐

    电脑入门——第1章__初识计算机

    电脑入门——第1章__初识计算机,对于这个大家肯定都认识,不过我们开始学都是从计算机游戏学的,并没有掌握计算机的技术,大家一定要认真看哦!

    精选_【Cocos Creator 联机实战教程(1)】——初识Socket.io_源码打包

    【Cocos Creator 联机实战教程(1)】——初识Socket.io 是一个针对游戏开发者,特别是使用Cocos Creator的开发者的系列教程。本教程旨在帮助他们掌握如何利用Socket.io实现在Cocos Creator游戏中的实时通信功能,这...

    初识JavaScript ———(2)!!!.md

    初识JavaScript ———(2)!!!.md

    初识JavaScript———(1)!!!.md

    初识JavaScript———(1)!!!.md

    初识软件工程——《构建之法——现代软件工程》

    从老师的推荐中,我选择了这本《构建之法——现代软件工程》,他向我展现了一个新的世界,让我有了新的认知,同时也带来了新的探索。  刚拿上手时,就被作者那有趣的文风所吸引,与之前阅读的资料有着天壤之别,让...

    大树系列课程之一——初识投资之路.pptx

    【初识投资之路】——大树系列课程 在投资领域,初学者往往面临众多困惑和挑战。大树系列课程之一——“初识投资之路”旨在引导新手投资者理解投资的基本概念,掌握必要的投资策略,以及如何逐步成长成为一名成熟的...

    01第1章 初识C++——C++程序设计入门

    本章"初识C++——C++程序设计入门"是学习C++之旅的起点,旨在为初学者构建坚实的基础。 首先,C++程序的基本结构通常包括预处理指令、函数定义、变量声明和控制流语句。预处理指令以`#`开头,如`#include`用于引入...

    Beginning Ruby From Novice to Professional 2nd Edition.pdf

    《初识Ruby:从新手到专业开发者》第二版是一本专为想要深入学习Ruby编程语言的人准备的指南。这本书详细地介绍了Ruby语言的基础知识、核心概念以及如何将这些知识应用于实际开发项目。Ruby是一种动态、面向对象的...

    初识PLC——PLC发展.ppt

    它旨在替代传统的继电器控制系统,以解决复杂系统中故障排查难、维护不便、适应工艺变化能力差等问题。1969年,美国数字设备公司(DEC)开发出了世界上第一台PLC,并在GM公司的生产线中得到了实际应用。 PLC的名称...

    初识通信——多线程服务器的建立

    在IT行业中,多线程服务器的建立是网络编程的一个重要组成部分,特别是在高并发场景下,如Web服务、游戏服务器等。本文将详细讲解如何初识通信,并以多线程服务器的构建为例,来阐述相关技术点。 首先,理解多线程...

    初识鲁迅——少年闰土PPT.ppt

    【初识鲁迅与《少年闰土》】 鲁迅,原名周树人,是中国现代文学的巨匠,同时也是著名的思想家、革命家和教育家。他的一生致力于文学创作和社会批判,其作品深具影响力,对中国现代文化的发展产生了深远影响。鲁迅在...

    初识PLC——PLC性能.pptx

    在本文中,我们将详细探讨FX系列PLC及其性能特点。 FX系列PLC是三菱电机推出的一系列产品,包括FX0、FX2、FX2C、FX0S、FX1S、FX0N、FX1N、FX2N和FX2NC等不同型号。这些PLC具有不同的I/O点数、单元类型和输出方式,...

    第1章 步入VB开发之门——初识Visual Basic 6.0.ppt

    步入VB开发之门——初识Visual Basic 6.0.ppt

    图片处理——认识Photoshop_”教学反思

    在"图片处理——认识Photoshop"的教学反思中,我们可以提炼出以下几个关键知识点: 1. **教学语言的重要性**:教师的语言是传授知识的媒介,必须做到简练、丰富,尽可能生动幽默。在教授Photoshop时,清晰、准确的...

    初识PLC——PLC工作原理.ppt

    这些输入信号被存储在输入映像寄存器中,作为当前输入状态的快照。 2. **程序执行阶段**:PLC按照程序逻辑顺序执行用户程序,这个程序通常由一系列逻辑和算术指令组成。这些指令决定了根据输入状态应如何控制输出...

    动手学Android之二——初识Activity示例代码

    当我们谈论"动手学Android之二——初识Activity示例代码"时,这通常指的是一个简单的教程,旨在帮助初学者理解如何创建并运行第一个Android应用,从而开始他们的Android开发之旅。 在Android中,Activity是负责显示...

    初识单片机—— 十字路口交通灯的.ppt

    例如,从A向绿灯转到黄灯,需要将P1端口的值从0F3H变为EDH,然后再到DEH等。 - 程序最后使用`END`指令结束,表示程序的完整执行流程。 总结来说,这个案例通过一个简单的十字路口交通灯控制系统,展示了单片机在...

    初识PLC——认识FXN系列PLC.ppt

    PLC技术

    初识PLC——PLC编程软件的使用.ppt

    PLC技术及应用

Global site tag (gtag.js) - Google Analytics