Ruby 以外に module 機能のようなものがある言語ってあったっけ?


だいありー[霜月-5(Sun)] より。


ということで私も興味を持ったので、 Smalltalk 処理系のひとつで Ruby と大変よく似たタイプのミックスイン機構を持つ Strongtalk で試してみました。結果、現時点での Ruby 1.9 の挙動と同じであるようです。


関連:
Squeak Traits の場合

式と評価結果(文字を入力できる場所で式をタイプして入力し(念のため選択して)、show it(ctr + s)で結果が得られます)
C2 new init   " => ' C2 M C1 M Object' "
定義(ファイルイン用…… C2.dlt などとして保存しておき、Launcher の File → File in... で読み込ませます)
Delta define: #Object as: ((Class delta)) !

! (Delta mirrorFor: #Object) methodsFor: 'as yet unclassified' !
init
   ^' Object'! !


Delta define: #M as: (
Mixin superclassType: 'Object' body: (
   (Class subclassOf: 'Object' instanceVariables: ''))) !

! (Delta mirrorFor: #M) methodsFor: 'as yet unclassified' !
init
   ^' M', super init! !


Delta define: #C1 as: (
(Class subclassOf: 'M |> Object' instanceVariables: '')) !

! (Delta mirrorFor: #C1) methodsFor: 'as yet unclassified' !
init
   ^' C1', super init! !


Delta define: #C2 as: (
(Class subclassOf: 'M |> C1' instanceVariables: '')) !

! (Delta mirrorFor: #C2) methodsFor: 'as yet unclassified' !
init
   ^' C2', super init! !


もっとも、歴史ある他の多くの Smalltalk 処理系とは違い、Strongtalk という処理系自体(より正確には、Smalltalk における多重継承機構)にはさほど(歴史はともかく…)実績があるわけではないので、こうしておくと無難…というよりは、そうした例が他にもある…という程度にとどめておくのが吉かとは思います。