特異メソッドについて

投稿日: Mar 21, 2009 8:47:1 AM

SmallTalk R4.1では、Rubyのようにインスタンスに対してオンデマンドにメソッドを追加できます。

dic := {#foo -> 1. #bar->2} as: Dictionary.

例えば辞書の値を文字列として得たいとしましょう。

通常であれば

(dic at: #foo) asString. "=> '1' "

とする必要があります。括弧が増えて、少し面倒ですね。

こうした書き方が頻発しているような場合、いっそ下記のようにして、特異メソッドを定義してしまうのも良いでしょう。

dic <++ 'stringAt: index ^(super at: index) asString'

これで、

dic stringAt: #foo. " => '1' "

と書くことができます。