Re: [問題] 抱歉 請教一下 module 和min-in的觀念
※ 引述《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
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章