查询网站备案密码是什么样的,专业的手机网站建设公司排名,网站怎么做内部链接,建个地方门户网站要多少钱Ruby中 respond_to? 和 send 的用法php?nameRuby classt_tagRuby中 respond_to? 和 send 的用法[收藏] Ruby中的字符串与符号 如同其他的OO语言一样#xff0c;在ruby中#xff0c;通过给对象发送消息#xff0c;来完成对象的功能#xff0c;比如… Ruby中 respond_to? 和 send 的用法 php?nameRuby classt_tagRuby中 respond_to? 和 send 的用法 [收藏] 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 cant 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 这两个方法我们可以构造更灵活和稳定的程序。 转载于:https://blog.51cto.com/gypsyer/162292