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

看板Ruby作者 (softwind rising)時間17年前 (2007/05/29 00:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
首先感謝神肥大大的回應 and 我又打錯字了 是 mix-in阿... ...(明明精神很好...) ※ 引述《godfat (godfat 真常)》之銘言: : ※ 引述《softwind (softwind rising)》之銘言: : : 像是混入 Enumerable 和Comparable : : 這邊 個人認為很像是 interface觀念 : no, 硬要說反而比較像繼承,Java interface 沒有實作的觀念 sorry 這邊小弟有點不太清楚 在 Java中 interface 本身也是不可以被具象化 interface基本上就是提供一個物件的 動作/行為的規格 interface本身是一個空殼 必須被繼承者實作了之後 該類別才能具象化 這個方法似乎是解決 Java不可以 多重繼承 卻又該類別希望帶有多種相似動作的方法(感覺ruby也是如此) (Head first Java中說 "java的interface就像是100%的純抽象class" ) : : 不知道板上大大 有沒有過類似的用法 (實際應用時) : 什麼意思?什麼時候不算實際應用? sorry 這邊我也沒有說清楚 以書上(Ruby programming) 的說法 module的用途 1. 提供命名空間 2. 以mix-in的方式提供功能 第1個 應該就是 c++ or java中 namespace or package的觀念(吧???) 而第2個 感覺很像是 interface... 例如說 @Guide, class Array 有mix-in module Enumerable 所以 可以將Enumerable 視為 Array這個class的 一種操作規格 而這些 module的方法 必須被 Array實作出來 如此Array.new 才能用(吧??? 是嗎???) 又例如 module Observable 他本身 就提供 add_observer 的功能 include Observable的class ... 嗯... 不用實作 因為他已經做好了... (該死 我又搬石頭砸自己的腳了...) 這樣來看的話 module 是可以擁有實作的 不只是規格的宣告而已... 但是 又可以偷偷繞過 類似Java的不可以多重繼承的問題 (哈) : : 再請教一下 guide上面說module是不可以直接實體化的 : : 不過 module Math 含有常數 PI, E : : 這種常數宣告是類似 class中 class variable的寫法嗎? : : (如果是Java 可以用final... 不過 Ruby...?) : capitalized words are constants : 開頭字母大寫的字是常數,不過他的意思是不能再指向另一個實體, : 而非 C++ 中 const 的概念:「物件不能再被更改」。 恩 這個我也有查到 謝謝 : 在 Ruby 中,物件不能再被更改是由內部的 frozen state 記錄。 : (上一篇提到的 frozen state 就用在這裡) : obj.freeze # now obj is forzen, can't modify any state for now on : 至於 Java 的 final 我不太確定… XD : 我想 Java 是沒有 C++ const 的概念, : 應該比較類似 Ruby 的 capitalized words 吧? : module Math : PI = 3.1415926 : end : 像是這樣寫。 : : module不能直接實體化 那module是不是不可以包含 : : instance variable??? : module 的 instance variable 會變成 mixee 的 instance variable : module M : attr_accessor :test : end : class C : include M : end : 相近於:(說是相近因為 mixin 其實是 ref 關係而非 meta-programming) : class C : def test; @test; end : def test=(new_test); @test = new_test; end : end 這邊 想討論一下 例如說 module M attr_accessor :M_var end class C include M end c1 = C.new(...) c2 = C.new(...) c1. M_var == c2.M_var ->??? c1.M_var.eql? c2.M_var ->?? 像上面這個例子 應該是? (我等等敲敲code好了) (如果 是"個別"實體化的話 應該是 true, false) : : 因為 class < aObject 的用法 : : 讓小弟覺得很不可思議 (Ruby!=Java ...) : 這是什麼意思…?應該不是指 less than operator 吧? : 是說 singleton instance 嗎? 一切都是我的錯... class Hello attr_accessor :name end obj=Hello.new("John") class << Hello #到底是'<'(繼承) 還是'<<'(類別方法) def output puts "Hello "+@name end end Hello.output #--> "Hello John" and 最後 感謝神肥大 回應我這很 低階...(能? @@")的問題 THX ------------------------ module N end module M < N ^^^ end 不行這樣用... 太惡搞了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.39.236
文章代碼(AID): #16MmSA1K (Ruby)
文章代碼(AID): #16MmSA1K (Ruby)