HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0717
レノスどんな型でも受け取れる引数タイプが欲しい4解決


レノス

リンク

2010/7/17(Sat) 20:01:11|NO.33755

現在の #defcfunc, #modcfunc で作成できる関数の引数では、
任意の型の値を受け取るということができません。
これができた方がプログラムが簡潔になり、非常にコーディングが楽なのですが、
そのような引数タイプを導入していただけないでしょうか。

例: pair の動的な生成 (いろいろ適当ですが)

#module pair first, second #modinit any _first, any _second // 実装大幅略 // 式中での生成 #defcfunc new_pair any first, any second newmod instance, pair@, first, second st_counter ++ return st_counter - 1 // ← instance の要素番号 #global

他には、poke や objprm のような処理をユーザ定義命令・関数で行うなど。



この記事に返信する


panda

リンク

2010/7/17(Sat) 20:47:52|NO.33756

たしかに、オーバーライドみたいな感じで使えたら便利ですよね。
タイプが「教えて」ではなくて、「要望/提案」なので
もしかしたら存じてるかもしれませんがマクロで無理やり実現するこはできます。


#module ; 定義 #define global func(%1) tmp=%1 %c _func(tmp) ; 関数(命令)の引数は変数として受け取る #deffunc _func var param switch vartype(param) case 1 type = "ラベル" : swbreak case 2 type = "文字列" : swbreak case 3 type = "実数" : swbreak case 4 type = "整数" : swbreak case 5 type = "モジュール" : swbreak case 6 type = "COMオブジェクト" : swbreak swend mes str(param) + " は ["+type+"型]の変数です" return #global func "こんにちわ!" ; 文字列引数 func 100 ; 数値引数 func 1.00



panda

リンク

2010/7/17(Sat) 20:54:11|NO.33757

恥ずかしい・・・。オーバーライドじゃなくてオーバーロードですよね。
最近予測変換に頼ってると間違えの候補が正解に見えてくる現象に悩んでいます(泣)



レノス

リンク

2010/7/18(Sun) 13:13:37|NO.33763

命令の場合についてはマクロと var 引数で対処可能ですが、
関数の場合はそのような手段がとれませんので……。



レノス

リンク

2010/7/26(Mon) 15:36:32|NO.33993

(追記)
それに、実引数を静的な変数で管理すると、さまざまな危険があります。
例えば、命令の内部から"間接的に"その同じ命令を呼び出している場合など
( これは特に #modfunc でよく起こりますし、その場合、この構造を回避するのは難しいです )。
引数を受け渡しのにスタックを使うというのも、大袈裟で、骨が折れる作業ですしね。



ONION software Copyright 1997-2023(c) All rights reserved.