Ruby 以外に module 機能のようなものがある言語ってあったっけ?
だいありー[霜月-5(Sun)] より。
ということで私も興味を持ったので、 Smalltalk 処理系のひとつで Ruby と大変よく似たタイプのミックスイン機構を持つ Strongtalk で試してみました。結果、現時点での Ruby 1.9 の挙動と同じであるようです。
式と評価結果(文字を入力できる場所で式をタイプして入力し(念のため選択して)、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 における多重継承機構)にはさほど(歴史はともかく…)実績があるわけではないので、こうしておくと無難…というよりは、そうした例が他にもある…という程度にとどめておくのが吉かとは思います。