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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0315
vixz関数の戻り値などをそのままコードの内容として利用する方法6解決


vixz

リンク

2017/3/15(Wed) 15:06:31|NO.78536


#module #defcfunc let str p1 return p1 #global dim a,2 a(0) = 20 mes let(a)(0) ; 実行するとエラーが出ます!

上の例で言うと、実行したときに

mes a(0)
となるようにしたいのですが、エラーが出て実行することができません。

どうにか実行する方法はありますでしょうか?



この記事に返信する


vixz

リンク

2017/3/15(Wed) 15:10:07|NO.78537

すみません、いろいろミスしてました...
正しくは、

#module #defcfunc let str p1 return p1 #global sdim a,10,2 a(0) = "20" mes let(a)(0)
となります



リンク

2017/3/15(Wed) 15:53:31|NO.78540

HSPの関数・命令は、引数こそ参照?を渡せますが、戻り値は値限定です。
なので、戻り値に代入ということはできません。

マクロではだめですか?

#define global ctype let(%1) %1



kanahiron

リンク

2017/3/15(Wed) 15:53:44|NO.78541

配列の要素の指定の仕方がおかしいです
関数let()にa(0)を渡したいのですから、 let(a(0))が正しいです

ちなみにHSP2.6xの頃は配列の要素数を「.数字」で表しました(現在は非推奨です)
a(0)→a.0
なのでlet(a.0)で同じ結果になります

…HSP、配列も関数も()ってなかなか無いですよね…
配列が[]ならそういうミスは起きにくいと思いますが



vixz

リンク

2017/3/15(Wed) 16:28:16|NO.78542

すみません、例が適切ではありませんでした...

#module #defcfunc week int p1 if p1 \ 7 = 0:return "sun" if p1 \ 7 = 1:return "mon" if p1 \ 7 = 2:return "tue" if p1 \ 7 = 3:return "wed" if p1 \ 7 = 4:return "thu" if p1 \ 7 = 5:return "fri" if p1 \ 7 = 6:return "sat" #global dim sun,10 dim mon,10 dim tue,10 dim wed,10 dim thu,10 dim fri,10 dim sat,10 sun(0) = 10 mon(0) = 20 tue(0) = 30 wed(0) = 40 thu(0) = 50 fri(0) = 60 sat(0) = 70 mes week(1)(0) ; エラーが出ます

これを実行して、week(1)がmonとなり、
mes mon(0)となって、最終的に20が表示されるようにしたいのです
何度もすみません...



HIJIKIsw

リンク

2017/3/16(Thu) 07:31:13|NO.78547

仰りたいことは概ねわかりました。

mes week(1)(0)
と書いて、

mes + week(1) + (0)  ↓ mes + mon + (0) (mon は week 関数の返り値)  ↓ mes mon(0) (と書いたのと同じことをさせたい)
ということだと思います。

しかし残念ながら、こういったことは HSP ではおそらく不可能です。
関数の返り値 (今回のケースでは "mon" という文字列) が、mes 命令にパラメータとして渡されるだけで、
それを変数名として扱うようなことはできません。

各データの管理方法、取り出し方法から見直してみてはいかがでしょうか?
そもそもはどういったことを実現したくてこの処理が必要なのかを明確にすれば、
少し違ったアプローチでも要件を満たす回答がくるかもしれません。

もしかすると見当違いな回答になってしまうかもしれませんが、
私なりに少し違うアプローチからの回答をおいておきます。

#enum sun =0 #enum mon #enum tue #enum wed #enum thu #enum fri #enum sat #enum week_length dim week, week_length, 10 week(sun, 0) = 10 week(mon, 0) = 20 week(tue, 0) = 30 week(wed, 0) = 40 week(thu, 0) = 50 week(fri, 0) = 60 week(sat, 0) = 70 mes week(1) // または mes week(mon) mes week(mon, 0) // など



vixz

リンク

2017/3/16(Thu) 22:24:41|NO.78560

>HIJIKIswさん
やはり不可能ですか...と、残念に思っていたのですが、
HIJIKIswさんのコードを見て新しいアイデアが浮かんだので、解決することができそうです!
ありがとうございます!



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