Re: [問題] Ruby 與 Interface Oriented Design

看板Ruby作者 (godfat 真常)時間18年前 (2007/02/14 15:48), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串5/9 (看更多)
※ 引述《yzugsr (Bird)》之銘言: : 一點淺見 請指教 : 在ruby裡, interface的觀念應該直接用duck typing的觀念實作 : ==別挑我語法錯, 下面都是pesudo code== 怕新手誤會,所以我還是點一下語法和用法的錯誤… XD : Ruby: : class Dog : def move, puts "Dogs walk"; end; end def move; puts "Dogs walk"; end; end : class Bird : def move, puts "Birds fly"; end; end def move; puts "Birds fly"; end; end : interface呢....以上我講完等於沒講一樣 : 所以老師說 ruby一定要寫test case (丟筆) : (其實是這句書上說的....) : 在test case裡確認你認為每個是animal的class, 都implement了animal該有的method : 這樣做等於你把interface定義在test case裡, 修改程式後記得跑test確認他是對的 yes, 差不多就是這個概念 static typing 的做法是把 spec 寫在你的核心程式中 duck typing 的做法則是把 spec 寫在 test case 裡 這也是一種 test driven 的做法 : class TC_Bird < Test::Unit::TestCase : test_acts_as_animal(Bird) : end 剛剛試了一下,TestCase 好像不能這樣用 一定要 def test開頭的methd; end : module AnimalTestHelper : def test_acts_as_animal(the_class) : obj = the_class.new : obj.move : end : end 把上面這個拉到 TC_Bird 的上面,然後 TC_Bird 改寫成: class TC_Bird < Test::Unit::TestCase include AnimalTestHelper def test_01 test_acts_as_animal Bird test_acts_as_animal Dog end end : class Test::Unit::TestCase, include AnimalTestHelper; end 不要這樣做,太暴力了… XD , 也該改成 ; 否則語法錯誤 -- #!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》 # if a dog nailed extra legs that http://www.ptt.cc/bbs/Ruby/index.html # walks like an octopus, and Welcome ~Ruby@ptt~ # talks like an octopus, then ◢█◣ http://www.ruby-lang.org/ # we are happy to treat it as http://www.ruby-doc.org/ # if it were an octopus. http://www.rubyforge.org/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18

02/14 17:12, , 1F
嗯我知道不能這樣用 我只是寫pesudo code 還是謝謝你 ^^
02/14 17:12, 1F
文章代碼(AID): #15qhxVV9 (Ruby)
討論串 (同標題文章)
文章代碼(AID): #15qhxVV9 (Ruby)