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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0722
KENTA#deffuncでの設定について8解決


KENTA

リンク

2007/7/22(Sun) 01:25:51|NO.9638

mesって、文字列でも、整数でも指定できるじゃないですか。

mes 1 mes "2"
#deffuncでmesみたいに、文字列でも整数でも指定できる方法はありませんか?
教えてください。



この記事に返信する


naznyark

リンク

2007/7/22(Sun) 02:21:10|NO.9641

 変数を受け取る命令を定義して、引数を一旦変数に代入してから
その命令を呼び出すようにすればできます。

#module // 命令 test の実際の処理を行う命令 test_ の定義。 #deffunc test_ var v1 mes v1 switch vartype( v1 ) case 2 mes ":文字列です。" swbreak case 3 mes ":実数です。" swbreak case 4 mes ":整数です。" swbreak swend return // 命令 test をマクロで定義。 #define global test( %1 ) _tmp = %1 : test_ _tmp // 変数 _tmp に test の引数を代入。さらに _tmp を引数にして _test を呼び出す。 #global test 123 test 45.67 test "abcd"



Irisawa

リンク

2007/7/22(Sun) 05:07:54|NO.9645

あれは特殊なんで(ブレースで囲むことで複数行文字列になるなど)。
型関係なく引数に受け取るような命令や関数は拡張プラグインでできます。
あとはマクロとの併用で上手く吸収するとかですが、結構面倒みたいです。
因みにmesの場合、引数に与えられた値は最終的に文字列型として渡されますので引数を
文字列型として宣言し、渡すときは文字列型にキャストしてやるという方法もありますね。



KENTA

リンク

2007/7/22(Sun) 16:39:25|NO.9665

naznyarkさん
ありがとうございました。おかげで解決しました。



f

リンク

2007/7/22(Sun) 23:59:11|NO.9671

なにこのIrisawaの的外れな回答わ
なんでコイツは「キャスト」とかHSPにない用語を使いたがるわけ?
ブレースの話なんか聞いてないし。



Irisawa

リンク

2007/7/23(Mon) 05:32:42|NO.9676

なんかただ批判したいだけのようにも見えますが誤解を受けたままではちょっと残念なので
一応、弁明はします。それをどう受け止めるかとかそれでもどうこういうようなら別に
仕方ないと思います。

ブレースに関しては特殊なので mes 命令の機能とまったく同様の動作を #deffunc などの
ユーザー命令・関数登録系プリプロセッサやプラグインなどで作成することはできないと
いう意味でその例示としてブレースのことを書きました。
ただし、少し不要だったかも知れません。

キャストというのはプログラミング言語においては型変換のことです。
HSP3における型変換はint/double/str関数でできますが、HSPの場合は正確にはCにおける
型変換だけでなくデータそのものを適切な内容に変換しますのでその面ではCなどとは
異なるものです。
なお、HSPでは極力、式の先頭の型に自動型変換されますので 0 + "1" は数値の 1 、
"1" + 0 は文字列型の "10" になります。
「HSPにはキャストはない」という人がたまにいますがこれに関しては、HSPにおいては
「(型変換を)キャストという呼び方はしていない」というのが正確であり、確かに決して
正しい表現ではなかったと思います。この辺、難しいですね。



すがり

リンク

2007/7/23(Mon) 05:50:26|NO.9677

>渡すときは文字列型にキャストしてやるという方法もありますね。

>「HSPにはキャストはない」という人がたまにいますがこれに関しては、HSPにおいては
>「(型変換を)キャストという呼び方はしていない」というのが正確であり、確かに決して
>正しい表現ではなかったと思います。この辺、難しいですね。

>キャストというのはプログラミング言語においては型変換のことです。




>なんでコイツは「キャスト」とかHSPにない用語を使いたがるわけ?




Irisawaは苦しいな。



f

リンク

2007/7/24(Tue) 07:59:35|NO.9697

>HSPの場合は正確にはCにおける
>型変換だけでなくデータそのものを適切な内容に変換しますのでその面ではCなどとは
>異なるものです。
分かってるんじゃん。
だったら「キャスト」なんて呼び方をするなよ。
お前の言い分だと、
Cプログラマがatoi()やstrtod()を「キャスト」と呼ぶことを大目に見てもいいじゃないか、
と言ってるようなものなんだよ。

>「HSPにはキャストはない」という人がたまにいますがこれに関しては、HSPにおいては
>「(型変換を)キャストという呼び方はしていない」というのが正確であり
まったく正確ではない。
キャストという呼び方をしていないなら、どういう呼び方をしているのか、HSPでキャストが行われている例を挙げて。

俺が思うにIrisawaはこう説明をすると思う。

  "1"+0 が   "10" となる際に、数値の0が文字列の"0"に「キャスト」されて   "1"+"0" となり、   "10" となる。
もしくは

  5+5.45 が   10 の整数で計算されるのは、式の先頭の型に自動的に型が揃うため、   5.45 が   5 に「キャスト」されて   5+5 となり   10 となる。
予想的中?

>「(型変換を)キャストという呼び方はしていない」
「キャスト」じゃないから「キャスト」と呼んでいないだけで、
それを「キャスト」とわざわざ呼ぶのは少々ひねくれているのではないか?



k

リンク

2007/7/24(Tue) 16:47:15|NO.9708

どーでもいい。
むしろ解決したんだからもうムダ



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