言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

目標

  • タイルスクリプタでメソッドの再利用をもっと有効にする。
    • タイルスクリプタのライブラリを作成出来る仕組み
    • 二つ以上の引数も利用出来るように
    • ブラウザから定義した物も使えるように

方針

  • 利用はタイルで行えるようにする。定義はテキストで行う。
  • タイルで二つ以上の引数のメソッドを定義するのは後回し

調査

  • [失敗]タイルで二つ以上の引数を取るメソッドを定義出来るか
    • タイルで二つ以上の引数定義をサポートする場合、まず引数なしのメソッドを定義し、メソッド名を2引数の物に改名するという方法を取る。
    • ScriptEditorMorph>>renameScriptTo: を実行する状況を調べる。ここで複数引数がおかしくなる。
  • メソッドがビューワとスクリプトエディタに表示される仕組み
    • ビューワへは CategoryViewer>>phraseForVariableFrom:
    • スクリプトエディタへは
  • ビューワの名前空間 Vocabulary
    • Public Object Vector eToys しか機能していない。デモンストレーション時切り替えるには有効か?
    • Vocaburaly のクラス変数 AllStandardVocabularies にはシステム標準の Vocaburaly が入っている。
      • AllStandardVocabularies <>- Dictionary of Vocaburaly
      • Vocaburaly にはいくつかサブクラスがあり、Vocabulary>>categoryListForInstance:ofClass:limitClass: を実装する事によって表示するカテゴリを決める。
    • StandardViewer>>chooseVocabulary で候補が挙がる。
  • ビューワからカテゴリを選んでスロットが表示される仕組み
    • CategoryViewer>>categoryWording: カテゴリ選択
      • 例:カテゴリビューワを inspect して、 self categoryWording: 'basic'
    • Player(Object)>>tilePhrasesForCategory: カテゴリ inViewer: ビューワモルフ
      • カテゴリに属するスロットの ViewerLine の配列を返す
    • Player>>methodInterfacesForScriptsCategoryIn: ボキャブラリ MethodWithInterface の配列を返す
    • Player>>methodInterfacesForScriptsCategoryIn: を改造して動的に UniclassScript を生成する事で。Player のサブクラスに自分で書いたメソッドも表示されるようにする。
    • CategoryViewer>>phraseForVariableFrom: aMethodInterface スロット一行分(ViewerLine)を返す。


MethodInterface の構造

  • selector セレクタのシンボル
  • argumentSpecifications 引数情報 (Variable オブジェクト)
  • resultSpecification 帰値情報 (ResultSpecification オブジェクト)
  • attributeKeywords 使われてないみたい
  • defaultStatus ビューワに出す時のデフォルトの状態 (#ticking, #paused, #normal, etc.)
  • ScriptStatusControl が表示されるかどうかは、Player class scripts に登録されているかどうかで決まる。
    • CategoryViewer>>chosenCategorySymbol: カテゴリの選択
  • メソッドのビューワに表示される時の形
  • メソッドの ScriptEditor に表示される時の形
  • ビューワを自分で作れるようにする。
  • ビューワに何が表示されるか?
    • カテゴリ選択ボタンを押した時 CategoryViewer>>chooseCategory
  • ブラウザで追加したメソッドもビューワに表示されるようにする。
    • 2 引数以上でも表示されるか?
    • 自動的にプロパティはプロパティらしく表示されるのか?