Io の継承モデル

Io の言語として一番面白い部分の一つだと思います。

前提知識として、インスタンスメソッドインスタンス変数とクラスメソッドとクラス変数の違いはありません、それらは全てスロットと呼ばれます。メソッド呼び出しとクラス変数参照はメッセージと呼ばれます。

Account = Object clone
Account init =  method(self balance = 0)
Account deposit = method(v, balance += v)
Account show = method(
  write("Account balance: $", balance, "\n")
)

などという Account をベースクラスとして入金した金に倍率をかけて貯蓄するイカサマ貯金を実現したいとします。

CheatAccount = Account clone
CheatAccount init =  method(
  parent = Account
)
CheatAccount deposit = method(v, balance += v * 2)

myAccount = CheatAccount clone
myAccount show
myAccount deposit(10)
myAccount show

これが解決一つ目。つまるところ親クラスのインスタンスを作ってその後適当にスロットを書き換えちまえば継承になるのです。

CheatAccount2 = Object clone
CheatAccount2 parent = Account
CheatAccount2 deposit = method(v, balance += v * 3)

myAccount = CheatAccount2 clone
myAccount show
myAccount deposit(10)
myAccount show

これが解決二つ目。Io ではベースクラスを検索して解決できなかったメッセージは特殊な変数 parent に対して送られます。よって、前者の継承が後者の継承より優先度の高い継承となります。

まあ、このへんの知識を前提として…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h