アラン・ケイの“オブジェクト指向”というアイデアをもとに(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72で遊んでみるシリーズです(なお最新のSmalltalkについては Pharo などでお楽しみください!)。他の記事はこちらから→Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019 - Qiita
(組み込みの構造化エディター(Add、Insert、Replace、Delete、Move、Up、Push)の続き)
addto
アクションで定義済みアクションやクラスにコード片を追加する
たとえばto foo (isnew)
のように、最小限の定義しかしていないクラスfoo
があったとして、これだとfoo
のインスタンスはクラスを問い合わせるis?
というメッセージには答えられない(正確には、スルーされたメッセージの先頭のis
がアクションとしてアクティベートされ、それが続く?
メッセージを受け取ってデフォルト値であるかのように「untyped」を返す偽装をしている)という話はすでにしました。
このクラスfoo
のインスタンス(上の例ではx
に代入)に正しく自分が属するクラスを返させるためには、foo
のメソッドに∢is ⇒(ISIT eval)
というパターンマッチを追加すればよいわけですが、これはaddto
アクションを使うことで簡単にできます。
コードを( )
で括って与えるto
アクションと違い、addto
アクションで追加したいコード片は配列リテラル(頭に☞
を追加。余談ですが、より厳密にはこれも☞
というアクションへのメッセージ送信で実現されている──)なので注意してください。
本格的にクラスやアクションのコードを編集するならedit
アクション
REPLのfix
と同じように、構造化エディターを使ってクラスやアクションのコードも編集できます。
使い方は前回紹介したfix
のそれとまったく同じです。
(組み込みの構造化エディター(ソース概説)に続く)