request_do?send方法
生活随笔
收集整理的這篇文章主要介紹了
request_do?send方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ruby中 respond_to? 和 send 的用法 php?name=Ruby" class="t_tag">Ruby中 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 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 這兩個方法,我們可以構造更靈活和穩定的程序。
轉載于:https://blog.51cto.com/gypsyer/162292
總結
以上是生活随笔為你收集整理的request_do?send方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#2.0泛型
- 下一篇: 梦到和前妻复婚啥兆头