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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0701
さかmodule内の引数m1の使用5解決


さか

リンク

2018/7/1(Sun) 18:25:53|NO.84696

たまたま気づいたので報告しておきます。
以下のソースを実行するとモジュール内の関数に引数として正しい値が
渡りません。
原因としては引数m1と"hspinet.as"の組み合わせがダメなようです。
module名を定義しても正常になります。
調べると変数m1は共通モジュールで使用しているようなことが書いてあ
ったのでそんなことでしょうか。

#include "hspinet.as" ;←削除すると正常

mm = "abc"
mes ""+mm
test mm
stop

#module
#deffunc test var m1
mes "["+m1+"]←正しい値[abc]が出ない"
return
#global



この記事に返信する


KOMARI

リンク

2018/7/1(Sun) 21:45:01|NO.84698

こんにちは。

最近HSPはご無沙汰なので、今はどうなっているかわかりませんが、
モジュール名は省略すると、m0、m1、m2…と名前がついていきます。
(おそらくソースの上から順に)

つまり、
m0: hspinet.as内で定義されているmodule(1個)
m1: stop後のmodule
と割り当てられているのです。

includeをコメントアウトすると動くようになるのも、この挙動によるものだと思います。

参考になれば幸いです。



KOMARI

リンク

2018/7/1(Sun) 21:57:02|NO.84699

過去記事っぽいものもありました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=62371



さか

リンク

2018/7/2(Mon) 20:31:50|NO.84712

KOMARIさん、レスありがとうございます。

はい、自分もそのような認識です。そのurlも見てました。
ちなみにm1をm0にすると#include外してもダメですね。
3.4でも同様なので結構みなさんは既知なんでしょうか。

他にもモジュール機能は良いのですがどうも使いづらいんですよね。
そのうち変更してもらえればいいなと思うのは、変数をローカルとして毎回
破棄するための#module〜#globalとlocalの記述が面倒です。
まあlocalまで実際は書かないですが。
deffunc、defcfuncの命令も長いです。
func(dll用ですが)として記述するだけでreturn後は使用変数をデフォルトで
破棄してほしいです。

多くの言語でグローバル変数の多用は可読性が悪いように関数は基本ローカル変数
で、グローバルとしたい場合は追加定義が良いと思うのですがみなさんはどうで
しょうか。



Y_repeat

リンク

2018/7/3(Tue) 18:52:39|NO.84715

こんにちわ

意外とHSPって密度の高い言語だと思います
ONITAMAさんもOpenHSPではそんなに密度込めては書いてないっぽいです

僕もあんまり自分の書いたコードを読めないので
せめて少しはコメント書き頑張ろうと思っているところです



さか

リンク

2018/7/7(Sat) 11:51:49|NO.84730

Y_repeatさん、レスありがとうございます。

なんとなく言ってることはわかります。moduleは後付け機能ですよね。

ただ、元に戻りますがm0等はエラーになるならいいですが誤動作になるので
結構致命的な不具合だと思うので次のバージョンでは対応してほしいです。



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