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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0813
ANTARESlengthの引数に配列の要素を使えるようにしてほしい4解決


ANTARES

リンク

2009/8/13(Thu) 04:20:07|NO.27033

 モジュールでvar型引数が配列の要素なのか単純変数なのかを
知りたいので。



この記事に返信する


shinkun

リンク

2009/8/15(Sat) 14:05:39|NO.27069

えーっと、スレッドタイトルと本文から推察するに、
length(p) として p の配列長を調べる事で、
配列か変数かを判断しようとしてるんですかね?

もしそうなら、その判断の仕方では無理があると思います。
単純変数でも length は利用でき、かつ、それは 1 を返すからです。
これだと、長さ 1 の配列と区別出来ません。

mes length(a) ; 長さ 1 dim b, 1 mes length(b) ; 長さ 1。あれ、区別出来ない!!

もし、どちらも単純変数と扱って構わないなら、以下のスクリプトで OK かと。

#module #defcfunc is_array array p return length(p) > 1 #global mes is_array(a) dim b, 10 mes is_array(b(2))

HSP でも 配列の要素 b(0) を b でアクセス出来たり、
単純変数 a を a(0) でアクセス出来たり、
配列長 1 の配列と単純変数を区別せずに扱ってますよね。

var 型変数で実装したいとのことですが、var も array も
インデックス指定出来るかどうかの違いがある位で結局似たようなものなので、
これでも十分ではないかと思うのですが、どうでしょう?



おにたま(管理人)

リンク

2009/8/15(Sat) 21:52:49|NO.27090

現状のバージョンでは実現できませんが、参考までにどのような命令を作成したいのか聞いてみたいです。
配列指定と単純な変数指定の両方に対応した1つの命令を作成したいということですか?



ANTARES

リンク

2009/8/16(Sun) 10:26:55|NO.27102

 swap命令を作っています。
一方が整数型で他方が実数型の場合、どちらも単純変数なら
実行し、いずれかが配列の要素ならエラーを返したいのです。



ANTARES

リンク

2009/8/16(Sun) 11:03:22|NO.27105

shinkunさんの指摘通り、array型引数の関数を介することで解決しました。

#module #defcfunc length_ array p return length(p) #defcfunc test var v1 #if 0 return length(v1) #else return length_(v1) #endif #global a=23 mes test(a) a.2=35 mes test(a.2)



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