作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 抱歉 请教一下 module 和min-in的观念
时间Tue May 29 03:30:26 2007
※ 引述《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)
1F:推 softwind:嗯 了解 谢谢 05/29 08:02