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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1009
Y_repeatモジュール変数のネスト4解決


Y_repeat

リンク

2016/10/9(Sun) 23:03:41|NO.77076

HSPの仕様上の質問なんですが

モジュール変数使用のモジュールがありますよね
#module mod_A o_A
#global
として
#module mod_B o_B
#global
のオブジェクトをo_Aに入れますよね
#module mod_C o_C
#global
のオブジェクトをo_Bに入れますよね

それがo_Bにいれれない気がするんですけど
違う単純なバグでしょうか
mod_Cをo_Bじゃない名前にすると入るんですよね

これが仕様だとしたら どう回避するべきでしょうか
オブジェクトの継承が出来ないので
重ねて委譲したいんですが



この記事に返信する


motchy

リンク

2016/10/10(Mon) 00:42:58|NO.77078

こういうことではなくて? 使いたいモジュール変数は参照行より前に定義しておく必要があるようです。
こちらの勘違いでしたらごめんなさい。


#module modC mbrC, comment id=0 #modinit comment="module C" mref id,2 return id #modfunc local printComment mes comment return #global #module modB mbrB, comment id=0 #modinit comment="module B" newmod mbrB, modC mref id,2 return id #modfunc local printComment mes comment foreach mbrB printComment@modC mbrB(cnt) loop return #global #module modA mbrA, comment id=0 #modinit comment="module A" newmod mbrA, modB mref id,2 return id #modfunc local printComment mes comment foreach mbrA printComment@modB mbrA(cnt) loop return #global array_modA=0 newmod array_modA, modA : idModA=stat printComment@modA array_modA(idModA)



Y_repeat

リンク

2016/10/10(Mon) 17:04:41|NO.77085

解決しました。たぶん、またパラメータの長さが長すぎるのが原因でした

モジュール変数の数を分割して複数のモジュールに割り振ったら動きました

パラメータって一つの長さが問題と思ってましたが

全体で64文字までってかんじですか?

そう言えば 質問して

モジュール変数 が長すぎて動かないことが原因だったことがあるのですが

モジュール変数自体は30文字くらいで 腑に落ちなったことがあったのですが

全体で何文字か(64文字?)決まっているのでしょうか

#moduleとかモジュールの名前も含まれるのでしょうか

含まれなさそうですがw

サンプルスクリプトは動く。僕のスクリプトは動かない。から逆算した面もありまして

サンプルスクリプトもありがとうございました



Y_repeat

リンク

2016/10/10(Mon) 17:47:39|NO.77087

そう言えば ググった時に モジュール変数を渡す。とかの項目がありました

知らんかったw

モジュール変数を割り振った時に 似たようなモジュールが複数出てきたんですけど

せっかくなので モジュールを渡して。の解決策とかありませんか?

操作するモジュールをオブジェクトにしてモジュール変数に入れる

操作用モジュールのモジュール変数として モジュール変数の中のモジュール変数に代入する

複数のモジュールにモジュール変数を渡して

複数のモジュールにそれぞれsetterとしての機能をつけたのと同等の処理にする

逆の操作でgetterを実現する

操作用モジュールのgetter機能は

操作用モジュールに参照渡しで参照を渡して 参照から操作する

#参照渡しが不可能ならこだわらなくていい

結構、面白そうなサンプルになりそうなので

パドリックドメインとかコピーレフトなしの転載可のサンプルお願いします

STEP書いてますが沿わなくても良くて

同等の処理でお願いします



Y_repeat

リンク

2016/10/10(Mon) 21:06:18|NO.77090

setterだけ一応動きましたw
渡せるとだけ書いてた気がするので
値渡しのみなのかな?
参照渡しは返り値使いますよね
返せるとは書いていなかった気がw



#module mod_label4koubunn i_is_live,i_name,i_ID,i_l_value,i_is_label,i_label ;i_is_live 作ってあるか使う可能性があるならさっさと作ってこれだけでもいれておけw ;i_nameラベル変数の名前 ;i_IDラベル変数のID ;i_l_valueラベル変数の値、コマンド番号を格納する(だったようなw) ;i_is_label ラベルを入れてあるか使う可能性があるならさっさと作っていれておけw ;i_label ラベルの値 #modinit i_is_live=-1 i_is_label=-1 return #modfunc local init str p_name,int p_ID,int p_l_value i_is_live=1 i_name=p_name i_ID=p_ID i_l_value=p_l_value return #modfunc local init_label var p_label i_is_label=1 i_label=p_label return ;getter #modcfunc local get_i_is_live return i_is_live #modcfunc local get_i_is_label return i_is_label #modcfunc local get_i_name return i_name #modcfunc local get_i_ID return i_ID #modcfunc local get_i_l_value return i_l_value #modfunc local get_i_label var _p_rvar _p_rvar=i_label return #modfunc local set_i_l_value var _p4set_value i_l_value = _p4set_value return #modfunc local dump logmes "dump "+i_ID logmes "dump "+i_name logmes "dump "+i_l_value return #modfunc local get4op var p_r p_r=""+i_ID+":"+i_name+":"+i_l_value return #global #module label4koubunn_opr sys_opr_obj #modinit newmod sys_opr_obj,mod_label4koubunn return #modfunc local init str _p_name,int _p_ID,int _p_l_value init@mod_label4koubunn sys_opr_obj,_p_name,_p_ID,_p_l_value return #modfunc local del_obj delmod sys_opr_obj return #modfunc local set_obj var p_obj sys_opr_obj=p_obj return #modfunc local get_obj var p_obj p_obj=sys_opr_obj return #global // 操作obj作成 newmod opr_obj,mod_label4koubunn // データ入れる init@mod_label4koubunn opr_obj,"opr",10,500 // 操作先作成 newmod _1st_obj,label4koubunn_opr init@label4koubunn_opr _1st_obj,"1st",1,100 // setter set_obj@label4koubunn_opr _1st_obj,opr_obj // これにset/getする #module sys_mdl_IF sys_type,sys_IF_name,sys_IF_NO,sys_IF,sys_IF_end #modinit int _p_no,str _p_name sys_type="IF" sys_IF_NO=_p_no sys_IF_name=_p_name ; newmod sys_IF,mod_label4koubunn ; newmod sys_IF_end,mod_label4koubunn return #modfunc local set_sys_IF var _p_obj sys_IF=_p_obj return #modfunc local set_sys_IF_end var _p_obj sys_IF_end=_p_obj return #global // 操作先作成 newmod _0nd_obj,sys_mdl_IF,0,"0nd" // データ入れる init@mod_label4koubunn opr_obj,"opr 02",12,1500 // setter set_sys_IF@sys_mdl_IF _0nd_obj,opr_obj // データ入れる init@mod_label4koubunn opr_obj,"opr 03",13,2500 // setter set_sys_IF_end@sys_mdl_IF _0nd_obj,opr_obj
パブリックドメインサンプルです

結果。渡したオブジェクト全部同じ値みたいです
knowbug使うとわかりやすいです
オブジェクトを渡すダメサンプルでしたw



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