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 に対して送られます。よって、前者の継承が後者の継承より優先度の高い継承となります。
まあ、このへんの知識を前提として…