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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0123
ユーキモジュールのこと5未解決


ユーキ

リンク

2007/1/23(Tue) 23:32:51|NO.5055

最近モジュールのことについて勉強し始めたものですが、
「モジュールの中の変数や値は
それぞれ別のものとして考える」というのは
何とか理解できたんですが、
モジュールの中で作られた変数を
またメインプログラムの中で
使える命令とかはあるんでしょうか?
調べれば調べるほどわからなくなってしまい
詰まってしまったので質問しました。
どなたかご教授お願いします



この記事に返信する


KIMU

リンク

2007/1/24(Wed) 00:34:59|NO.5056


//モジュール名を付ける #module "tes" #define global t_ma ma@tes #define global t_mb mb@tes #deffunc tesA int A ma=A mb=456 return #global mes "ma="+str(ma) mes "mb="+str(mb) mes //モジュール内の変数名に @ の後ろにモジュール名を書く mes "ma@tes="+str(ma@tes) mes "mb@tes="+str(mb@tes) mes mes //モジュール内の変数は命令を実際に実行しないと意味が無い tesA 123 mes "ma@tes="+str(ma@tes) mes "mb@tes="+str(mb@tes) mes //@モジュール名 だと使い勝手が悪いので、マクロで使いやすくするのが良いかも知れない mes "t_ma="+str(t_ma) mes "t_mb="+str(t_mb)



Irisawa

リンク

2007/1/24(Wed) 00:35:47|NO.5057

HSP3ではモジュールに関連する変数は主に2種類あります。
1つは従来から存在していたモジュール内のグローバル(?)変数です。
これはモジュール毎に存在する変数でこの変数の正確な記述は


変数名@モジュール名(添字)

となります。
呼び出し元と同じモジュール内の場合は「@モジュール名」は省略できます。
また、配列の1番目(0)の場合は添字も省略できます。
メインモジュール空間は空(名前なし)なので


変数名@(添字)

が正確な記述です。
メインモジュール内で


a = 1

とした場合は


a@(0)

という意味です。
モジュール空間名がmodの場合に


a = 1

とあれば、


a@mod(0)

とします。
モジュール(空間)名を省略した場合は省略したモジュール毎に上から自動で「m」+0からの
連番数字が割り当てられます。


#module #deffunc func a = 1 return #global func mes a@m0(0) stop

もう1つはHSP3から実装されたモジュール変数(struct型)です。
こちらはC++などのクラスに近い機能を持っていて複数の変数をまとめて管理できます。
ただし、構造体とは内部的な仕様が異なり、そのままファイルなどに保存することは
できません。
(保存して再度読み込むとデータは破壊されます)
こちらは、#modfuncで定義した命令内でしかモジュール変数にアクセスできません。

他にもローカル変数などの関連するものがありますが、これらは一時的に保持されるだけで
命令や関数から抜けるとメモリから破棄されてしまうので外部からアクセスすることも
内容を保持することもできません。
(戻り値などとして外部に返した場合は別)



As

リンク

2007/1/24(Wed) 00:38:59|NO.5058

モジュールに関してはオブジェクト思考プログラミングについて
調べてみるといいかもしれません。
まぁこんな難しいことはいいとして^^;

モジュールの中で作られた変数をメインで使うには

#module mod_name #deffunc aaa bbb=1234 return #global aaa mes bbb@mod_name stop

という風に使います。



GENKI

リンク

2007/1/24(Wed) 00:47:25|NO.5060

 モジュール中に使われた変数をモジュールの外で使う方法はありますが、スクリプトがわかりにくくなるので個人的にはあまりおすすめしません。
モジュール内から値を取り出すときは次のような方法を使うことをオススメします。

 モジュールの中から値を取り出すときは通常は…

#module #deffunc test a = 123 return a #global test mes stat
としてreturnで値を返したり、

#module #deffunc test var a a = 123 return #global test hensu mes hensu
として指定した変数に値を返したり、

#module #defcfunc test a = 123 return a #global mes test()
のように関数にしてreturnで値を返す方法が使われます。


> 「モジュールの中の変数や値は
> それぞれ別のものとして考える」

 要するにこの考え方で、特定の決まった方法でのみ値のやり取りをしていれば、あとからモジュールだけ修正する場合にモジュール外のスクリプトを修正する必要がなくなります。
 下手にモジュール内の変数を直接読んだりしていると、モジュール内でその変数名を書き直したり使い方を変えたり出来なくなってしまいます。


 さて、問題のモジュール外でモジュール内の変数を扱う方法は…他の方解説お願いします。(^_^;
私はほとんど使ったことないので…。(@モジュール名をつけるんでしたっけ?)



GENKI

リンク

2007/1/24(Wed) 00:51:15|NO.5061

みなさんレス早いな…。(^_^;



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