看板 Ruby 關於我們 聯絡資訊
※ 引述《fayhong (風起的瞬間)》之銘言: : 我們在寫 Java 的時候,有種東西叫 interface, : C++ 與 Objective-C 也有,但是作用跟 Java 好像又不太一樣 : 在 Java 中,我們可以定義 interface,藉以告訴實作的人要做哪些功能, : 甚至在 Test Driven 的實作過程中,只需要先定義好 interface, : 就可以動手寫 unit test 的東西 : 只不過,在 Ruby 中,要怎麼做這種"空殼"呢? : 或者是,有什麼樣的設計方法可以取代我原本的想法呢 @@a 先旨聲明我只是 Ruby 的初學者 (在公司用了 兩天的偷懶時間來看 tutorial :P ) 首先你要說出你所謂的 interface-oriented 要的是什麼. 簡單來說, interface oriented programming 要達到的只是: 你只是面對著一個 interface 來工作, 你只要用這個介面上的東西就好, 實際的 impl 是怎樣的你是不用理會的. 所以單純為了達到這個效果, 你只要和 "使用者" 協議好中間的 interface 就可以了. Duck typing 已經足夠達到這個效果有餘. API provider 定義好 interface 是什麼 (i.e. 有什麼 method, 還有 method signature), 然後 API user就使用 這 interface, 這樣其實就是 interface oriented programming. 但如果你想要的是 compile time checking, 那麼 我就幫不上忙了 :P 以我所知, 由於 Ruby 是 Ducking type, 只有到真正跑時才能知道某 object 有沒有支援某 'interface', 你最多只能在運作 是用 respond_to 在 runtime 檢查. 這和 Java (or C++ or C# etc) 在 compile time 已經能 "確定" interface 的支援很不同. 但這種又是 strongly- typed language 的特徵, 要套在 Ruby 用又好像不太合適. Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.72.0.45 ※ 編輯: adrianshum 來自: 202.72.0.45 (02/21 15:36)