如同其他的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 这两个方法,我们可以构造更灵活和稳定的程序。
- 浏览: 20023 次
- 性别:
- 来自: 南京
相关推荐
电脑入门——第1章__初识计算机,对于这个大家肯定都认识,不过我们开始学都是从计算机游戏学的,并没有掌握计算机的技术,大家一定要认真看哦!
【Cocos Creator 联机实战教程(1)】——初识Socket.io 是一个针对游戏开发者,特别是使用Cocos Creator的开发者的系列教程。本教程旨在帮助他们掌握如何利用Socket.io实现在Cocos Creator游戏中的实时通信功能,这...
初识JavaScript ———(2)!!!.md
初识JavaScript———(1)!!!.md
从老师的推荐中,我选择了这本《构建之法——现代软件工程》,他向我展现了一个新的世界,让我有了新的认知,同时也带来了新的探索。 刚拿上手时,就被作者那有趣的文风所吸引,与之前阅读的资料有着天壤之别,让...
【初识投资之路】——大树系列课程 在投资领域,初学者往往面临众多困惑和挑战。大树系列课程之一——“初识投资之路”旨在引导新手投资者理解投资的基本概念,掌握必要的投资策略,以及如何逐步成长成为一名成熟的...
本章"初识C++——C++程序设计入门"是学习C++之旅的起点,旨在为初学者构建坚实的基础。 首先,C++程序的基本结构通常包括预处理指令、函数定义、变量声明和控制流语句。预处理指令以`#`开头,如`#include`用于引入...
《初识Ruby:从新手到专业开发者》第二版是一本专为想要深入学习Ruby编程语言的人准备的指南。这本书详细地介绍了Ruby语言的基础知识、核心概念以及如何将这些知识应用于实际开发项目。Ruby是一种动态、面向对象的...
它旨在替代传统的继电器控制系统,以解决复杂系统中故障排查难、维护不便、适应工艺变化能力差等问题。1969年,美国数字设备公司(DEC)开发出了世界上第一台PLC,并在GM公司的生产线中得到了实际应用。 PLC的名称...
在IT行业中,多线程服务器的建立是网络编程的一个重要组成部分,特别是在高并发场景下,如Web服务、游戏服务器等。本文将详细讲解如何初识通信,并以多线程服务器的构建为例,来阐述相关技术点。 首先,理解多线程...
【初识鲁迅与《少年闰土》】 鲁迅,原名周树人,是中国现代文学的巨匠,同时也是著名的思想家、革命家和教育家。他的一生致力于文学创作和社会批判,其作品深具影响力,对中国现代文化的发展产生了深远影响。鲁迅在...
在本文中,我们将详细探讨FX系列PLC及其性能特点。 FX系列PLC是三菱电机推出的一系列产品,包括FX0、FX2、FX2C、FX0S、FX1S、FX0N、FX1N、FX2N和FX2NC等不同型号。这些PLC具有不同的I/O点数、单元类型和输出方式,...
步入VB开发之门——初识Visual Basic 6.0.ppt
在"图片处理——认识Photoshop"的教学反思中,我们可以提炼出以下几个关键知识点: 1. **教学语言的重要性**:教师的语言是传授知识的媒介,必须做到简练、丰富,尽可能生动幽默。在教授Photoshop时,清晰、准确的...
这些输入信号被存储在输入映像寄存器中,作为当前输入状态的快照。 2. **程序执行阶段**:PLC按照程序逻辑顺序执行用户程序,这个程序通常由一系列逻辑和算术指令组成。这些指令决定了根据输入状态应如何控制输出...
当我们谈论"动手学Android之二——初识Activity示例代码"时,这通常指的是一个简单的教程,旨在帮助初学者理解如何创建并运行第一个Android应用,从而开始他们的Android开发之旅。 在Android中,Activity是负责显示...
例如,从A向绿灯转到黄灯,需要将P1端口的值从0F3H变为EDH,然后再到DEH等。 - 程序最后使用`END`指令结束,表示程序的完整执行流程。 总结来说,这个案例通过一个简单的十字路口交通灯控制系统,展示了单片机在...
PLC技术
PLC技术及应用