Re: [問題] Ruby 與 Interface Oriented Design

看板Ruby作者 (godfat 真常)時間18年前 (2007/02/21 16:23), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串8/9 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : 所以單純為了達到這個效果, 你只要和 "使用者" : 協議好中間的 interface 就可以了. 靠著 unit test : 但如果你想要的是 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 Ruby 也是 strongly-typed, 一般是這樣說的 就我所看到的,weakly-typed 通常是指 type 跟 type 間的界線不明確 也就是說,type 跟 type 間經常會發生 implicit conversion 跟 Perl 不熟,不過 Perl 有一個狀況個人覺得很可怕 print '123' + 1 這樣的結果會是 124 我也不清楚會是 '124' 呢,還是 124 也許這在 Perl 裡根本不重要 print '123' + 1 + 1 會是 125 print '123' + 1 . '1' 會是 1241 反之在 Ruby, print '123' + 1 會有錯誤:can't convert Fixnum into String 一定要這樣做: print '123'.to_i + 1 才可以得到 124 print ('123'.to_i + 1).to_s + '1' 才可以得到 1241 否則會得:String can't be coerced into Fixnum dynamic typing 本來就不可能做到 compile-time check, 強制要求這點是個不合理的要求。不過我相信 unit test 可以解決 大部份的 check 需求。可能沒有 compile-time check 要來得有力, 不過這更強迫 programmer 寫下 test case, 也許是好事 :) (畢竟 test case 還會迫使 programmer 分離模組) --   『風車』が廻り続ける度に 『美しき』幻想が静かに紡がれ    『焔』の揺らめきの外に 『腕』を伸ばす愚かな者達 -《Roman》5th Story  『宝石』をより多く掴もうと 『朝と夜』の狭間を彷徨い続ける Track 10   『星屑』の砂の煌めきにも 『葡萄酒』の仄甘い陶酔を魅せ 黄昏の賢者 『賢者』が忌避する檻の中から 『伝言』の真意を彼等に問うだろう   『天使』が别れを告げし時 『地平線』は第五の物語を識る -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18

02/21 16:40, , 1F
謝謝指正 Strongly typed :) 讓我再消化一下 :)
02/21 16:40, 1F

02/21 21:04, , 2F
說真的我都只是憑感覺說的,慚愧沒學過 XDb 不用客氣
02/21 21:04, 2F

02/21 21:06, , 3F
大致參考這個的:http://rubyurl.com/8k2
02/21 21:06, 3F

02/21 21:08, , 4F
上面那網站是 wikipedia
02/21 21:08, 4F
文章代碼(AID): #15t06P5v (Ruby)
討論串 (同標題文章)
文章代碼(AID): #15t06P5v (Ruby)