Alias機能について

投稿日: Mar 20, 2009 12:3:59 PM

SmallTalk R4.1では、クラスとメソッドの双方にエイリアス(別名)を付けることができます。

クラスの場合:

Dictionary alias: #Map.

これで、以後はMapという名前でDictionaryクラスを使うことができます。

m := Map new.

m at: #a put: 111.

m at: #b put: 222.

m p.

トランスクリプトには以下のように表示されます。

a Dictionary(#a->111 #b->222 )

どのようなエイリアスが付与されているかは以下のようにするとわかります。

Dictionary aliases. "=>  an IdentitySet(#Map)"

使い終わったら元に戻しておきましょう。

Dictionary unalias: #Map

イディオムとしては、クラスメソッドのinitializeでエイリアスを付け、obsoleteではずすようにしておくとエレガントな感じがします。

メソッドの場合:

クラスの場合とほぼ同様の書き方です。

MyClass>>#initialize alias: #init.

これで、以後はinitializeの代わりにinitを使うことができます。

エイリアス一覧は以下のようにして取得します。

(MyClass>>#initialize) aliases. "=> #(#init)"

エイリアスの外し方もおそらく皆さんの予想通りです。

MyClass>>#initialize unalias: #init.

より簡易な記法として、whileAlias:do:というものも用意されています。これはブロック内だけでエイリアスを有効にします。外し忘れもなくなるので重宝しますよ。

MyClass>>#initialize whileAlias: #init do: [

    inst := MyClass new.   

    inst init.

].