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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0803
うひょ#deffuncや#defcfuncについて5解決


うひょ

リンク

2006/8/3(Thu) 10:00:06|NO.1741

#deffuncや#defcfuncを使うときに、
引数の型に「int型またはstr型」みたいな指定はできないのでしょうか。
また、引数を省略できるようにすることは出来ないのでしょうか。
出来るのでしたら、その方法を教えて下さい。お願いします。



この記事に返信する


Irisawa

リンク

2006/8/3(Thu) 10:51:36|NO.1743

なんか、質問の意味がよく分かりませんが"引数の型"は引数を設定する場合は必須なので
今までどうやって引数を渡していたのでしょうか。



うひょ

リンク

2006/8/3(Thu) 12:08:28|NO.1747

良く分かりませんでしたか。すみません。
分かりやすく言うと、
「int型かstr型どちらでも引数にできる型はないか」
みたいな感じです。(余計分かりづらくなったかもしれません)



kz3

リンク

2006/8/3(Thu) 12:33:00|NO.1749

>引数の型に「int型またはstr型」みたいな指定はできないのでしょうか。

・int は整数定数かint型変数から数値のみを受け取ります。
・str は文字列定数かstr型変数から文字列のみを受け取ります。

よって、「int型の定数・変数 または str型の定数・変数」を受け取る引数の型はありません。
しかし、
・var は変数を受け取ります。型は問われません。

ということを利用して、次のような記述が出来ます。

#module #define global multarg(%1) tmp=%1: _multarg tmp #deffunc _multarg var p1 mes p1 return #global multarg 100: multarg 1.23456: multarg "test" n = 200: d = 1.7320508: s = "TEST" multarg n: multarg d: multarg s
指定された引数の型によって処理を分けたい場合はvartype()関数を使って、引数の型を調べます。

これがやっている事というのは本来のmultarg命令( _multarg )が『引数は変数でなければならない』という約束事をユーザーに強要する部分を、
モジュールが『ユーザーが変数を用意する手間を省いてあげる』ためのインターフェース( multarg )を提供しているということです。

パラメータの省略も、#defineマクロの『デフォルト値』を利用することで行えます。
詳しくはプログラミングガイドの「#defineマクロについて 」をゆっくり読んで、
実際に書かれていることを動かしてみてください。
よく分からなかったら、分からなかったことを説明してくれれば、分かる範囲で教えます。



うひょ

リンク

2006/8/3(Thu) 16:32:09|NO.1753

ありがとうございます!
そんな方法、考えつきませんでした。
これで試してみます。



うひょ

リンク

2006/8/3(Thu) 16:33:05|NO.1754

あ、解決チェックを入れるのを忘れていました。



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