Re: [問題] 抱歉 請教一下 module 和min-in的觀念

看板Ruby作者 (godfat 真常)時間17年前 (2007/05/29 03:30), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《softwind (softwind rising)》之銘言: : 首先感謝神肥大大的回應 and 我又打錯字了 : 是 mix-in阿... ...(明明精神很好...) 不敢,不過說到標題,下次可以省略掉一些跟問題無關的字, 例如「抱歉 請教一下」之類的 :p 客套話可以在內文裡面說。 and 你這篇我覺得有點自言自語|||b 以討論區而言,不是個很好的現象 所以有些你看來已經知道的事,我就不多提囉 : ※ 引述《godfat (godfat 真常)》之銘言: : : no, 硬要說反而比較像繼承,Java interface 沒有實作的觀念 : 這個方法似乎是解決 Java不可以 多重繼承 我從來不認為 Java 的 interface 解決了多重繼承的問題, 因為實作上不能夠繼承的話,老實講意義根本不大。 算是解決了一半的問題吧…我想。 而這也是 static typing 的問題,在 dynamic typing 如 Ruby 中, 根本就不需要 interface. Java interface 是為 static typing 做的。 跳脫 static typing 則此 interface 毫無意義。 : (Head first Java中說 "java的interface就像是100%的純抽象class" ) true : 以書上(Ruby programming) 的說法 module的用途 題外話,"Ruby Programming" 是「中文」書名,實在讓人覺得很囧 第一次看到有人把日文翻譯成中文是翻成英文的…… 不免讓我覺得他是有陰謀,想讓大眾搞不清楚 Ruby Programming 和 Programming Ruby 這本聖經書有啥關係。 : 1. 提供命名空間 : 2. 以mix-in的方式提供功能 : 第1個 應該就是 c++ or java中 namespace or package的觀念(吧???) true : 而第2個 感覺很像是 interface... half true, 包含實作,你後面提到了 : 例如說 @Guide, class Array 有mix-in : module Enumerable 所以 可以將Enumerable 視為 Array這個class的 : 一種操作規格 : 而這些 module的方法 必須被 Array實作出來 : 如此Array.new 才能用(吧??? 是嗎???) false, mixin 包含實作 : 這樣來看的話 module 是可以擁有實作的 不只是規格的宣告而已... 要說規格的宣告,比較像是 unit test 在做的事 :) : c1. M_var == c2.M_var ->??? : c1.M_var.eql? c2.M_var ->?? eql? 是 == 的 synonym, 所以這兩者的答案一定會是一致的 感覺你被 Java 荼毒有點深,如果你要判斷的是兩者是不是同一個 instance, 要用 object_id, 像是 c1.M_var.object_id == c2.M_var.object_id : (如果 是"個別"實體化的話 應該是 true, false) 是個別的 instance variable : class Hello : attr_accessor :name : end : obj=Hello.new("John") : class << Hello #到底是'<'(繼承) 還是'<<'(類別方法) : def output : puts "Hello "+@name : end : end 因為你的 Hello 本身就是 class, 所以你這樣寫意義不大, 會等同於打開 Hello 追加內容。 class << something 的意義在於產生一個 singleton instance, 相對於 singleton class. 意思就是那個 instance 會是獨一無二的。 至於辦到這件事的方法,則是在繼承體系中插入一個 virtual class, 假設現在有 class A, 他的繼承體系是: Object -> A a = A.new aa = A.new class << a; end 那麼 a 的繼承體系會變成: Object -> A -> virtual class a 而 aa 的繼承體系保持: Object -> A : and 最後 感謝神肥大 回應我這很 低階...(能? @@")的問題 本板凍結好久啦,感謝你的發問 : module N : end : module M < N : ^^^ : end : 不行這樣用... 太惡搞了嗎? module N; end module M include N end 同樣的意思 其實我有點搞不清楚 Ruby 分 class 與 module 到底有何意義了… 既然這麼像,何不合併算了?有人有看法嗎? edited: 我在想,這麼做也許沒有太多語言上的意義。 比較像是為了實現簡單的單一繼承體系, 卻又要解決多重繼承的問題之結果。 也就是說,強迫你把物體用一個很簡單的分類法分類。 像是 obj.class 一定只會回傳一個最底層的 concrete class... -- 生死去来、棚頭傀儡、一線断時、落落磊磊 《花鏡》-世阿弥 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.58.12 ※ 編輯: godfat 來自: 220.132.58.12 (05/29 03:41)

05/29 08:02, , 1F
嗯 了解 謝謝
05/29 08:02, 1F
文章代碼(AID): #16MotLa0 (Ruby)
文章代碼(AID): #16MotLa0 (Ruby)