request_do?send方法
生活随笔
收集整理的這篇文章主要介紹了
request_do?send方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Ruby中 respond_to? 和 send 的用法 php?name=Ruby" class="t_tag">Ruby中 respond_to? 和 send 的用法 [收藏] Ruby中的字符串與符號 如同其他的OO語言一樣,在ruby中,通過給對象發(fā)送消息,來完成對象的功能,比如 str.upcase ,就是給str發(fā)送upcase的消息,點操作符(.),就是用來給對象發(fā)送消息的,str接受到消息,然后執(zhí)行與消息對應(yīng)的功能。 但是,某些時候,我們并不知道對象能響應(yīng)哪些消息,比如下面的代碼就會產(chǎn)生錯誤: > obj = Object.new > obj.talk undefined method 'talk' for #<Object:0x12345678> (NoMethodError) 因為obj對象沒法響應(yīng)talk這個消息,如果使用 respond_to? 這個方法,就可以實現(xiàn)判斷對象能否響應(yīng)給定的消息了: obj = Object.new if obj.respond_to?("talk") obj.talk else puts "Sorry, object can't talk!" end 這樣即使obj不能響應(yīng)talk,也不會使代碼產(chǎn)生錯誤退出,我們也可以應(yīng)用 respond_to? 方法,根據(jù)對象的屬性,在程序運行時靈活的控制。 與 respond_to? 相對應(yīng),send 方法和點操作符一樣,用來給對象發(fā)送消息,比如文章開始的 str.upcase ,用 send 可以寫成 str.send("upcase"),它們實現(xiàn)的功能是完全相同的,那么為什么還要用send呢? 這是因為,send 發(fā)送的消息,在程序運行時是可變的,我們可以根據(jù)不同的輸入,動態(tài)的向?qū)ο蟀l(fā)送不同的消息。 比如一個圖書管理系統(tǒng),每本書都有諸如作者、出版社、日期、價錢這些,我們要根據(jù)用戶的輸入查詢某本書的屬性,如果不用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 這樣不用在逐個對用戶的輸入進行測試,只要查詢對象能否相應(yīng)這個消息,再用send將輸入直接發(fā)送給對象即可。 通過 respond_to? 和 send 這兩個方法,我們可以構(gòu)造更靈活和穩(wěn)定的程序。
轉(zhuǎn)載于:https://blog.51cto.com/gypsyer/162292
總結(jié)
以上是生活随笔為你收集整理的request_do?send方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#2.0泛型
- 下一篇: Source Code Library