辞書内アドレスを再起動後にも有効になる形で格納するための変数クラスがあります。
まず、"DICADDR"クラスです。これはその名の通り、辞書(DICtionary)内のメモリーアドレス(ADDRess)を格納する変数のためのクラスです。用法は次のようになります。:
DICADDR MyXT
' myWord Put: MyXT
: word2 Get: MyXT EXECUTE ;
また、XT専用の変数クラスが"X-ADDR"です。このクラスは、実行用のメソッド"Exec:"を持っています。:
X-ADDR MyXT
' myWord Put: MyXT
: word2 Exec: MyXT ;
さらに、XTには、そのアレイクラスが定義されています。"X-ARRAY"です。
アレイに必要な項目数とともに宣言します。例えば、4つの場合は
4 X-ARRAY MyXArray
のようになります。要するに、宣言時のトップスタック値が、アレイの項目数になります。各項目はインデックス値で識別されますが、0を基点とします。ですから、4項目アレイなら、インデックスは0,1,2,3となるわけです。
XTを格納するには、一つずつ格納する方法と、一挙に全部格納する方法があります。一つずつやる方法は、
' word0 0 To: MyXArray
' word1 1 To: MyXArray
' word2 2 To: MyXArray
' word3 3 To: MyXArray
のように、"To:"メソッドを使います。
一挙に格納するには、
xts{ word0 word1 word2 word3 } Put: MyXArray
のように、"xts{ }"括弧と"Put:"メソッドを使います。また、"Put:"メソッドの同義語として、"Actions:"メソッドも利用できます。つまり、
xts{ word0 word1 word2 word3 } Actions: MyXArray
こちらの方が、実体をよく表していると説明されています。
項目のどれかを実行するときはには、まず、スタックにインデックス値を置いた上で、"Exec:"メソッドを用います。例えば、"word3"を実行したかったら、
3 Exec: MyXArray
とします。つまり、トップスタックに置かれるであろう値が、連番でかつインデックスの範囲内であることが保証されるなら、このクラスのオブジェクト一本で、case-switchを用いることなく選択的にワードを実行できるわけです。
さらにもう一つ、"X-COL"クラスがあります(COLはCollectionの意味)。これも、XTのアレイの一種ですが、宣言時にスタックに与える数値は、実際の項目数というよりも、最大項目数を設定するという意味を持ちます。
10 X-COL MyXCol \ 10は格納できる最大項目数
このX-COLクラスのオブジェクトは、XTのスタックと考えることもでき、XTを格納すべき項目のインデックス値を与えることなく、"Add:"メソッドによって、Xを"積み上げて"いくことができます。
' someword Add: MyXCol \ somewordのXTは既存の項目に積み上げられる
現在何個のXTが格納されているのかを知るには、"Size:"メッセージを送れば、その個数が返されます。
XTの実行はX-ARRAYと同じです。
関連項目:
最終更新:2019年06月18日 17:20