REBOL[]
Inherit: func [super [object!] sub [object!]] [
append sub reduce/no-set [parent: super]
]
Invoke: func [ obj member /local ans] [
either ans: select obj member [
ans
] [
attempt [Invoke obj/parent member]
]
]
Super-Class: context [
Member-A: does [ print "Member-A of Super" ]
Member-B: does [ print "Member-B of Super" ]
]
Sub-Class: context [
Inherit Super-Class Self
Member-B: does [ print "Member-B of Sub" ]
Member-C: does [ print "Member-C of Sub" ]
]
Invoke sub-class 'Member-A
Invoke sub-class 'Member-B
Invoke sub-class 'Member-C
2008年6月9日
OOP in REBOL 3.0: An Example
2008年6月5日
OOP in REBOL ?
根據REBOL語言設計者Carl在部落格文章中的說法,他以前曾經相當著迷於OOP (Object-Oriented Programming),但是現在已經不再是如此了。雖然Carl不是特別喜歡OOP,但是在REBOL 3.0的設計中,我們依然可以找到少數OOP的影子。最明顯的例子是Scheme與Port。
從OOP的角度來看,Scheme就像是Class,Port就像是Instance;Scheme只有一份,被所有的Port共用。另外,Scheme也像是Super-class;而Port像是Sub-class,Port所提供的action方法可以覆蓋(shadow)掉Scheme的action;而Port如果沒有實做(implement)自己的action,就會使用Scheme的版本。
如果你想在REBOL中寫OOP的程式,那麼你可以參考Scheme與Port的源碼。關於OOP,你可以參考我的這篇文章。
從OOP的角度來看,Scheme就像是Class,Port就像是Instance;Scheme只有一份,被所有的Port共用。另外,Scheme也像是Super-class;而Port像是Sub-class,Port所提供的action方法可以覆蓋(shadow)掉Scheme的action;而Port如果沒有實做(implement)自己的action,就會使用Scheme的版本。
如果你想在REBOL中寫OOP的程式,那麼你可以參考Scheme與Port的源碼。關於OOP,你可以參考我的這篇文章。
訂閱:
文章 (Atom)