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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1228
秋柊モジュールの上手な使い方を教えてください。10未解決


秋柊

リンク

2013/12/28(Sat) 17:27:17|NO.58934


#module AA dummy #modfunc update return #global #module BB dummy #modfunc update return #global newmod mod_a,AA newmod mod_b,BB list.0 = mod_a list.1 = mod_b foreach list update(list(cnt)) loop

こういう事をやろうとすると、違うモジュール内でも同名の関数は作れないようで symbol in use のエラーが出てしまいます。
gotoやgosubを使わずに上手くやる方法があったら教えてください。
また、そもそもモジュールはこういう用途で使うものではないのかもしれないと思いました。
だとしたら本来はどういう用途で使う物なんでしょうか?
モジュールAA型の変数が複数ある時にforeachで一度に……というのはわかるんですが、そうではなく
↑のソースを訂正すると↓になりますよね。


#module AA dummy #modfunc update_a return #global #module BB dummy #modfunc update_b return #global newmod mod_a,AA newmod mod_b,BB update_a(mod_a) update_b(mod_b)

このupdate_aにmod_aを、update_bにmod_bを渡すのが冗長に思えました。そこで

update_a(mod_a) update_a(mod_b) update_b(mod_a) update_b(mod_b)
などを試してみたところエラーは出ず、モジュール変数名が一致していればしっかりと機能する事がわかりました。
しかしこれは具体的にはどのように活用できるのでしょうか?
そもそもこういった利用の仕方でいいんでしょうか?
よろしくお願いします。



この記事に返信する


saracena

リンク

2013/12/28(Sat) 19:52:36|NO.58943

#module AA dummy,dummy2
#modfunc local update ;こういう定義の仕方もある dummy2=0 return #global #module BB dummy #modfunc local update return #global newmod mod_a,AA newmod mod_b,BB update@AA(mod_a) update@BB(mod_b) update@AA(mod_b) ;エラー



秋柊

リンク

2013/12/28(Sat) 21:43:47|NO.58946

ありがとうございます。
しかし本質的には何も変わっていないように見えるのですが、理解が足りないだけでしょうか。
そうだとしたらすみません、もう少し解説をお願いします。



saracena

リンク

2013/12/28(Sat) 22:10:54|NO.58950


foreach list update(list(cnt)) loop
それぞれのモジュールの update を自動的に判別ということならHSPでは無理でしょう。



秋柊

リンク

2013/12/28(Sat) 23:43:22|NO.58952

やっぱり無理ですよね。

常に
update_a(mod_a)

という使い方をするのなら、
update_a
で表記の方法は十分だと思ったので、
update_a(mod_b)

というような使い方をしてこそモジュールの本領が発揮できるんじゃないかと思ったんですが、そうでもないですか?



y.tack

リンク

2013/12/28(Sat) 23:47:30|NO.58953

ポリモーフィズムがしたいってことですか?

http://quasiquote.org/hspwiki/HSPでもポリモーフィズムがしたい



秋柊

リンク

2013/12/29(Sun) 00:33:12|NO.58954

最初はそんな感じだったんですが、どうやらできないとわかりました。
できないものは仕方無いのでそれは諦めつつ、それじゃあモジュールって何ができるんだろう?
っていうところです。



y.tack

リンク

2013/12/29(Sun) 00:54:52|NO.58955

オブジェクトとは何ぞやと言うと
関数とデータを組ませてまとめる。なのかな?

例えばキャラA B Cがいて
それぞれステータスがあって

戦闘処理に現在選択中のキャラを渡せば戦闘してくれる。みたいな

オブジェクト指向じゃないと3とおり処理を書く必要があるんですけど
オブジェクトだと一回の処理にデータを渡せる。みたいな

一回グローバルなオブジェクトに代入して
オブジェクトが渡せなくても グローバルなオブジェクトに操作するとか妄想しております

何にしろ きちんとオブジェクト指向つかいたい人にHSPはむいてない気もするんですが^^;



joe

リンク

2013/12/29(Sun) 06:53:34|NO.58962

モジュールの識別子がないならつくっちゃえ的な


#module AA mod, dummy, dummy2 #modinit mref _mod,0 : mod = _mod : return #modfunc local update mref _mod,0 if _mod == mod : dummy2 = 0 return #global #module BB mod, dummy #modinit mref _mod,0 : mod = _mod : return #modfunc local update return #global goto *@f #deffunc update var modv update@AA modv update@BB modv return *@ newmod mod_a, AA newmod mod_b, BB list.0 = mod_a list.1 = mod_b foreach list update(list(cnt)) loop <pre/>



ソイスープ

リンク

2014/1/7(Tue) 08:07:01|NO.59223

module内の変数などに代入する、スクリプトを書いた場合、それは以下の様なスクリプトに変換されます。

a=1
から
 ↓

a@モジュール名=1
言わば、同じ名前を他の領域で何度も使用する事が出来る機能であり。
大幅にスクリプト記述量を下げる事が出来ます。



YSR

リンク

2014/3/8(Sat) 02:13:49|NO.60506

>NO.59223
機能というか、単に(超簡素な)名前空間実装だよねそれ……
実質はグローバル変数だから、何も考えず再帰関数を書くと泣く羽目になるし
(配列ってlocal指定できなかったよね?)
ガチでそういった機能を使いたかったら、C++等の
「オブジェクト指向プログラミングができる言語」で書くのがベターかと



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