ruby中的respond_to和send的用法

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

这样即使obj不能响应talk,也不会使代码产生错误退出,我们也可以应用 respond_to? 方法,根据对象的属性,在程序运行时灵活的控制。

obj = Object.new
if obj.respond_to?("talk")
obj.talk
else puts"sorry ,object can't talk!"
end

 

与 respond_to? 相对应,send 方法和点操作符一样,用来给对象发送消息,str.upcase ,用 send 可以写成 str.send("upcase")

不同的是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就简单多了:

print "Search for"
request = gets.chomp

if book.requend_to?(requesd)
puts book.requesd
else
puts "input error"
end


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值