hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
hsp3/モジュール変数 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

モジュール変数

HSP3から新たに導入されたモジュール系命令の使い方を模索。

レポートスクリプト

みんなでいじってください。

+  レポートスクリプト

動作確認

  • インスタンス毎に異なる型のメンバを保持できる。
    +  サンプル
  • モジュール内変数はインスタンス間で共有される。
    +  サンプル
  • モジュール変数(インスタンス)は引数で受け取れる。
    +  サンプル

サンプル

見やすく、わかりやすく、に注意しつつ書いてみました。
もっと見やすく出来るようでしたら修正していただけると助かります。
[hsp3]

+  サンプル

モジュール変数の配列番号を取得する

マニュアルには正式な記載はありませんが、次のようにしてnewmodで作成したモジュール変数の配列番号を取得することが出来ます。

  • thismodを使う方法。
    +  モジュール変数の配列番号を取得
    HSP3掲示板(NO.39717 ひらまる さん)より引用
  • mrefの 2を使う方法。
    +  モジュール変数の配列番号を取得
    HSP3掲示板(NO.39745 xxx さん)より引用
  • mrefの 68を使う方法。
    +  モジュール変数の配列番号を取得
    バグトラッキングシステム内のHSP3WishList?35: newmod で追加された添え字を取得したいより naznyark さんのレスポンスから引用

モジュール型変数の要素を削除

モジュール型変数の要素を削除を削除するには、delmod命令を使用する。 例えばモジュール型変数「v」の要素番号「1」を削除するには次のように記述する。

delmod v(1)

なお、この方法の場合要素番号の把握が欠かせないため、自前でカウントするか上述した方法でモジュール変数の配列番号を取得する必要がある。

また、thismodを活用することで要素番号を意識せずにモジュール型変数の要素を削除することもできる。(※この方法はサンプルやマニュアルに記載が無い手法であることを記しておく。)

+  条件を満たす要素だけを削除

死亡フラグを使ったり、一定のしきい値を超えた場合だけ駆除なとどいったケースでの利用が考えられる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#module Person name, age
#modinit str _name, int _age
name = _name
age = _age
return
#modfunc getName
return name
#modfunc getAge
return age
#global
;////////////////////////////
 
#module Student grade, super
#modinit str _name, int _age, int _grade
newmod super, Person, _name, _age
grade = _grade
return
#modfunc getGrade
return grade
#modfunc super_getAge
getAge super
return stat
#modfunc super_getName
getName super
return
#global
 
newmod Jack, Student, "Jack", 20, 2
super_getName Jack
mes "氏名:"+refstr
super_getAge Jack
mes "年齢:"+stat
getGrade Jack
mes "学年:"+stat

補足説明資料

マニュアルでは不足している情報をここでまとめてみます。

用語解説

使い慣れない言葉がいくつかありますので、簡単に解説しておきます。(間違いを発見したら修正お願いします。)
なお、単語の中には一般的に他の言語などでも使用される単語がありますが、ここではモジュール変数の説明で使用される単語であるとします。

  • モジュール変数(モジュール型変数)
       複数の変数やデータをまとめて管理することができる変数。
       または、複数の変数やデータをまとめて管理することができるデータ格納方法。(モジュール変数機能)
  • インスタンス
       直訳すると「実体」。オブジェクトとも。
       newmod命令で内容を得たモジュール変数のこと。
  • モジュール型 (struct)
       モジュールで定義されている型の総称。int や str と同じたぐい。
       型の構成は、newmod命令でユーザーが独自に作成することが出来る。
  • コンストラクタ
       newmod命令でモジュール型変数を作成した際に自動的に実行される処理。
       主に、モジュール変数の内容の初期化を行う、などに使用する。
       処理内容は#modinit命令で登録できる。
  • デストラクタ
       モジュール型変数が削除(解放)される際に自動的に実行される処理。
       処理内容は#modterm命令で登録できる。
  • メンバ変数
       モジュール変数の内容のこと。つまり、モジュール変数が保有している複数の変数のこと。
       #modfunc、#modinit、#modterm命令の内部からしかアクセスできない。
       ・単に「メンバ」、とも。
  • モジュール命令
       #modfunc命令で登録された命令のこと。第一パラメータにモジュール変数を受けとる。
       この中からなら、モジュール変数のメンバ変数にアクセスできる。
  • モジュール内変数
       モジュール内で使用している、モジュール変数の管理外にある共有の変数。
       ただ単に、モジュールの中に閉じこめられている通常の変数。モジュール変数機能とはあまり関係ない。
       #modfuncなど以外からでもアクセスできる。

    <資料>
    プログラミング・マニュアル
     3.拡張文法
      モジュール
       ■モジュール変数の定義

コメント

  • メンバ変数とメソッドを兼ね備えるクラスのようなものと予想中。 -- kz3 2005-10-30 10:26:38 (日)
  • キタ━━(゚∀゚)━━ヨ、期待の新機能なのですが詳細な挙動の確認をサボてました。レポート期待してます!!んー他人任せw -- araran 2005-10-31 10:34:53 (月)
  • 実はMatrixをこれで実装してみようかと企ててます・・・。でも理解のないコピペはパクリなのでちゃんと行列から勉強したいので進行は遅いです^^; -- kz3 2005-10-31 12:58:22 (月)
  • 同じこと考えてますねw
    気になってること書いちゃいますね。(時間があれば自分で調べて上にサンプルでも乗せちゃいます。)
    • メンバ変数って#moduleの第二引数以降ですよね。配列とかできるのかな?
    • 通常のモジュール内の変数って今まで通り、各モジュールのインスタンスで共有されちゃうのかな?
    • Matrixをモジュールで作ったら、それのインスタンスを引数で渡せるのかな?
      Matrix出来るとめちゃプログラムすっきりしますねーw楽しみですw -- araran 2005-10-31 13:17:11 (月)
  • クラス....って、C++思い出すから言わないでぇ -- hiroki? 2005-11-01 10:02:00 (火)
  • C言語はまぁまぁ理解できるけど、C++のクラスはわかんない。 ハハ -- hiroki? 2005-11-01 10:03:45 (火)
  • setmodが動かないのは何だろう・・・。newmodで次々にインスタンス化する模様。 -- kz3 2005-11-01 10:15:19 (火)
  • 僕はオブジェクト指向言語の経験ゼロなのでさらに分からない・・・けどなんとか「感じ」だけは・・・
    モジュール内の変数はインスタンスで共有されていますね。(modcnt) -- kz3 2005-11-01 11:14:10 (火)
    • そうすると、各インスタンス毎にもてるのは、modno,modvalueだけですか。厳しー -- araran 2005-11-01 12:32:22 (火)
  • スリーサイズの件ですが突っ込まないでください。(謎 -- kz3 2005-11-01 11:37:54 (火)
  • インスタンス毎に異なる(内部では異なっていないようだが)型を使用できるようです?? -- kz3 2005-11-01 12:07:08 (火)
  • delmodを交えたスクリプトでは以降のnewmodで配列のどこにインスタンスが作られたかということは自分で調べないとダメそうです。(varuseで事前の状態と比較するなどして?) -- kz3 2005-11-01 12:09:05 (火)
  • 使用状況を調べるのにプログラムガイドのモジュール変数のところに「usemod」とありましたが「varuse」の間違いかな…。 -- kz3 2005-11-01 12:14:02 (火)
  • 今頃モジュール変数を触り始めました。かなり出遅れた感が。。。コメントがみんな2005年だ [sig] -- Charlotte 2007-05-31 (木) 23:22:13
  • str型が戻らないけど、statにはstr型は入らないのかな?常識だったりして。。。-- Charlotte
  • > str型...
    ユーザー定義命令などを自分で書いて使っている人にはわりと常識です。
    return (整数)stat に代入される
    return (実数)refdval に代入される
    return (文字列)refstr に代入される

    -- naznyark? 2007-06-01 (金) 02:15:37

    • あ。やっぱり常識でしたか 表まで作ってもらって申し訳ないです。。 -- Charlotte 2007-06-01 (金) 20:14:27
  • さて、いまさらモジュール変数をはじめたわけですが…ほんとコメントが2005ばっかり。w moduseってvaruseの間違いだったんですね、どうりでエラー出るわけだ。setmodも動かないし、newmodで作られた配列の要素の取得もできない…まだまだモジュール変数って未完成っぽいですね。 -- GENKI? 2007-07-22 (日) 20:52:16
  • とか何とかいっていたら、RC1からsetmoddelmodが廃止になりました。 -- GENKI? 2007-07-23 (月) 22:01:53
  • delmodが廃止ってうそ言っちゃだめですよ [worried2] >GENKIさん
    あとnewmodで追加された添え字を取得するにはこんな方法があるようです
    http://quasiquote.org/hspbt/guest?project=hspb3wish&action=view_report&id=35 -- Shark++ 2007-07-23 (月) 23:57:11
  • ごめんなさい。ウソ言ってしまいました。なくなったのは#delmodのパラメーターが削除されています。とのこと。パラメーターだけですね。早とちりをしてしまいました…。_| ̄|○ -- GENKI? 2007-07-25 (水) 01:06:08
  • newmodで作成したときの添え字を取得する方法あったんですね!ありがとうございます。 -- GENKI? 2007-07-25 (水) 01:11:03
  • モジュール変数を勉強しなおしたんで記事に少し追記してみました。 -- GENKI? 2009-02-07 (土) 00:57:27
  • ユーザー定義型に利用しようと思ったけど、モジュール内変数へのアクセッサを作るのが面倒臭いですね。@のように何らかの手段が用意されていれば良かったのに。 -- 2010-02-19 (金) 17:31:23
  • ここまでくるとオブジェクト指向にしたほうがいいんじゃないかと。 -- 2010-02-26 (金) 00:01:30
  • HSPの基本機能でデータを管理するのは無理そうなので、SQLeleの力を借りることにしました。 -- 2010-04-21 (水) 23:17:22
  • どうしても記述が冗長になってしまうんですよね [rajya] -- 2010-04-22 (木) 20:25:46
  • 別々のモジュールでも同じ関数名は使用できないんだな・・・ -- 2010-05-11 (火) 19:19:51
  • delmodの使い所がいまいちよくわからなかったんでthismodと組み合わせてみた。とりあえず問題なく動くんだけどこれでいいのかな?モジュール変数は要素番号を気にて使うような仕様になってないと思うのですよ。…どんなもんですかね? -- GENKI? 2011-06-18 (土) 16:44:41
    +  サンプル
  • delmod>明示的なデストラクタ(modterm)の呼び出しとか。modfunc の中で delmod しても(その後にメンバ変数を参照しなければ)大丈夫ですよ。 -- 2011-06-18 (土) 17:29:35
  • メモ。目からうろこなレスがついてるスレッド。http://hsp.tv/play/pforum.php?mode=all&num=39714 -- GENKI? 2011-06-21 (火) 22:43:48

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2011-06-23 (木) 23:35:04 (898d)