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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1202
レスクenumについて6解決


レスク

リンク

2012/12/2(Sun) 21:19:15|NO.51012

HSP3.2です。プログラムは詳しくありません。
enumで設定した定数名で配列の要素を呼び出すと新規変数が作成されることがあるのですが
これはenumの使い方がまずいのでしょうか?
なにがどうなってるかわからなく、少しでもいいので解説して頂きたいです。

例えば
二行目でefFunc = 1の定数を作成したのですが
Effect.0.efFunc = 1
と書いて Effect.0.1 に代入しようとしても Effect.0.0に代入されてしまいます。
このときefFuncという変数が新規に作成されてしまうようです。
しかし、()をつけてEffect.0.(efFunc)とすればEffect.0.1に代入されます。


また、↓のコードについて [ef]→[ac]にすべて置換などを行った場合には
新規に変数が作成されるということはなく、enumで指定した定数が参照されて
こちらの理想通りに動くため
頭の中がハテナマークでいっぱいになっています。



#enum efNone = 0 #enum efFunc #enum efX #enum efCnt #enum efMax dim effect, 5, efMax //()つけないと新規変数が作成される effect.0.efFunc = 1 effect.0.efCnt = 2 effect.0.efx = 3 effect.0.(efFunc) = 4 effect.0.(efCnt) = 5 effect.0.(efx) = 6 repeat length2(effect) mes "aa"+cnt+":"+effect.0.cnt loop stop

結果
aa0:3
aa1:4
aa2:6
aa3:5



この記事に返信する


fortunehill

リンク

2012/12/3(Mon) 00:52:58|NO.51015

/*スペースを空けれは定数として認識されるのでは?*/

#enum efNone = 0 #enum efFunc #enum efX #enum efCnt #enum efMax dim effect, 5, efMax //()つけないと新規変数が作成される effect.0. efFunc = 1 effect.0. efCnt = 2 effect.0. efx = 3 effect.0. efFunc = 4 effect.0. efCnt = 5 effect.0. efx = 6 repeat length2(effect) mes "aa"+cnt+":"+effect.0.cnt loop assert stop



暇人

リンク

2012/12/3(Mon) 01:00:00|NO.51016

単なるバグだと思う
別に()を使う必要も無いスペースを挟むだけで正常に動く

#enum efNone = 0 #enum efFunc mes efFunc Effect.0.efFunc = 1 Effect.0 .efFunc = 2 mes "Effect.0.efFunc = "+Effect.0.efFunc mes "Effect.0 .efFunc = "+Effect.0 .efFunc
"."(ピリオド)を使うのはHSP ver2までの書式と互換性を保つのが目的っぽいので
Effect(0,efFunc)の書式を使った方が良いかも



暇人

リンク

2012/12/3(Mon) 01:18:42|NO.51017

他にも問題有った

dim a,10 a.5+1=-1 a.(8+1)=-2 repeat 10 mes a(cnt) loop
ヘルプには"."(ピリオド)の次の数値だけ要素に使われるとあるけど
上のだとa.5+1=-1が無かった事になってる
バグの元だから使わない方が良いな・・・



レスク

リンク

2012/12/3(Mon) 11:39:29|NO.51018

バグでしたか。
教えていただいたようにスペースを挟んでみたら正常に動作しました。
助かりました。
array(要素1,要素2)の書式が追加されたことも知らなかったため勉強になりました。

fortunehillさん、暇人さんありがとうございました。



レノス

リンク

2012/12/3(Mon) 19:31:05|NO.51023

余計かもしれませんが一応
> 暇人さん
> a.5+1=-1
これは (a.5) + (1 = -1) と解釈されて a.5 = a.5 + (1 = -1) と処理されます。バグではありません。



xxx

リンク

2012/12/3(Mon) 19:51:53|NO.51025

既に解決済みとなっていますが・・・。
HSP3.31です。

#enum efNone = 0 #enum efFunc #enum efX #enum efCnt #enum efMax dim effect, 5, efMax //()つけないと新規変数が作成される ;effect.0.efFunc = 1 ;effect.0.efCnt = 2 ;effect.0.efx = 3 // enum宣言した変数を全て大文字にする effect.0.EFFUNC = 1 effect.0.EFCNT = 2 effect.0.EFX = 3 ;effect.0.(efFunc) = 4 ;effect.0.(efCnt) = 5 ;effect.0.(efx) = 6 repeat length2(effect) mes "aa"+cnt+":"+effect.0.cnt loop stop
これでも動きます。
また、一次配列なら enum宣言時の変数のままでも正常でした。

#enum efNone = 0 #enum efFunc #enum efX #enum efCnt #enum efMax dim effect, efMax effect.efFunc = 1 effect.efCnt = 2 effect.efx = 3 repeat length(effect) mes "aa"+cnt+":"+effect.cnt loop stop
enum宣言したものは大文字にしておけば良いかも。定数だし。



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