また今更ながらのネタかもしれませんが、
moduleの配列について。
moduleは、オブジェクト指向でいうクラスみたいなものだと認識していますので
その配列は、かなり頻繁に使います。
作りたいものがあって、作ろうと思ったら
たぶんすぐ出会う。(実際出会った。)
そこで、HSPのヘルプを見ていたら、
便利機能が書いてあったので、サンプルを作ってみました。
--------
; moduleの配列について
goto *main
; IDを覚えてるだけのmodule
#module myMod n_id
#modinit int p_num
n_id = p_num
return
#modcfunc local GetId
return n_id
#global
*main
; module生成3連発
newmod aMyMod, myMod, 111
newmod aMyMod, myMod, 222
newmod aMyMod, myMod, 333
; aMyModは配列になっているので、そのつもりでmes
len = length(aMyMod)
for i, 0, len
mes "[" + i + "] ID=" + GetId@myMod( aMyMod( i ) )
next
stop
------------
newmodのところで、オブジェクト指向的には(しつこい?)クラスをnewしているわけです。
newしているんだけど、aMyModという同じ変数に入れ続けているのがポイントです。
newmodという関数は、
1つ目の引数がmodule型でない場合は、module型に初期化して設定。
module型の場合は、配列変数として新しい要素を追加する。
という仕様なのです。
すばらしいです。
HSPの配列は、値を保ちながら要素を増やすことができないので
newmodの中で勝手にやってくれるのは歓迎です。
もし嫌なら、別の変数を用意してやればいいわけだし。
そんな備忘録でした。
あ、処理結果。
[0] ID=111
[1] ID=222
[2] ID=333