HSPでユーザ定義関数の引数にほぼ何でも渡す
HSPは他は型があってないようなものなのになぜか関数や命令の定義のときだけ型を要求されて非常にやりにくいです。そこでなんでも渡せるようにしてみました。とはいってもまだ参照というか変数を渡す実装はできていないのですが...
アイディアとしては単純で変数ならばなんでも受け取れるので一時変数を生成してそこに代入してからvarを受け取る本物の関数に渡すという仕組み。ただ、それだと煩雑なのでプリプロセッサでマクロを定義しました。一応ユニークな変数を使うために特殊展開マクロを使っています。
コードは以下のような感じ。まったく型を意識せずにプログラムがかけています。vartype使えばオーバーロードっぽいことも実装できるかもしれません。
#module AllType #deffunc local func var a mes a+2 return #define global func(%1) %tfunc %i=%1:func@AllType %o #global //サンプル *main a="hoge" func(a) func("var") func(3.2)
問題の変数が渡せないというのは一時変数に渡した段階で中身のみの受け渡しになってしまうため。マクロに渡された段階で変数なのかただの値なのかの判定が出来ればいいのですが...onerrorを使う方法も思いつきましたが、終了後に設定を元に戻す方法が思いつかず...もうちょっと考えて見ます。
追記:よく考えたら多くの言語で参照か値渡し決められるのないですね。このままでいいのかもしれません。