newmodはmodule配列要素を自動的に増やしてくれる | HotSoupProcessorの記録

HotSoupProcessorの記録

コンピューター言語 HotSoupProcessor の練習記録です

また今更ながらのネタかもしれませんが、
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