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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0203
玄冬returnの引数にラベルは使えないのですか?2未解決


玄冬

リンク

2014/2/3(Mon) 09:10:10|NO.59628

↓のようなことがしたいのですが、
#module
#deffunc f_set var p_1 v_label = p_1 ;ラベル型変数をv_labelに代入 return #defcfunc cf_return return v_label ;ラベル型変数v_labelを返す #global label = *sub_1 f_set label gosub cf_return() stop *sub_1 dialog "1です" return

関数ではなく、命令にして、適当な変数に代入するしかないのでしょうか?
ご回答よろしくお願い致します。



この記事に返信する


fortunehill

リンク

2014/2/3(Mon) 10:17:19|NO.59629

/*ご参考(返す型が無いから無理ですかね:stat=int,refstr=str,refdval=double)*/

nn = *label_1,*label_2,*label_3 gosub nn(xxx()) stop *label_1 :mes "1" :return *label_2 :mes "2" :return *label_3 :mes "3" :return return #defcfunc xxx return rnd(3)



MillkeyStars

リンク

2014/2/3(Mon) 11:57:30|NO.59630

gosub cf_return() の記載にしたい理由ってなんだろう。
cf_return() で前処理しつつ、目的のところにサブルーチンジャンプしたいのであれば、自分で命令を作ればいい。

というか、

#defcfunc cf_return return v_label ;ラベル型変数v_labelを返す
の処理の場合ただラベル変数を返すだけだから、cf_return を ctype に置き換えちゃえばいいだけかと。

下の場合は、ctype に置き換えた場合。

#module VVV//←のモジュール空間名は必ず設定すること。設定する事によって、グローバルからも他のモジュール空間からでもアクセスできるようになる。 #define global ctype cf_return(%1 = 0) VVV@v_label #global
上記だと、ただサブルーチンジャンプ先の v_label を返すってだけだけど。

あとは、グローバル空間からモジュール空間内のラベルに直接アクセスしちゃう方法
上記 #module でモジュール空間名を設定したので、変数の先頭側に VVV@ をつけるとモジュール空間の変数にアクセスしてって事になる。

#module VVV #deffunc f_set var p_1 v_label = p_1 ;ラベル型変数をv_labelに代入 return #defcfunc cf_return return v_label ;ラベル型変数v_labelを返す #global label = *sub_1 f_set label gosub VVV@v_label //←直接モジュール内ラベル変数を指定している。 stop *sub_1 dialog "1です" return

などなど。cf_return() で前処理ありの場合とかは、cf_return() 内部から gosub しちゃうって手も。



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