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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0531
GEN3「等しくない:!」の判定について7未解決


GEN3

リンク

2016/5/31(Tue) 12:46:23|NO.75662

次の4行のスクリプトを実行すると、「おまえは敵だ1」だけが表示されます。
「おまえは敵だ0」も表示されなければおかしいと思うのですが…。
何か根本的な見落としをしているのでしょうか。


boy=0 if boy!"仲間" : mes "おまえは敵だ0" boy=1 if boy!"仲間" : mes "おまえは敵だ1"



この記事に返信する


Velgail

リンク

2016/5/31(Tue) 13:59:16|NO.75663

HSPの仕様ですね。
どういうことかというと、式は一番左にある項の型にキャストするという特徴があります。
(だいたいhttp://memories.zal.jp/WP/blog/20090130_992.html みたいな規則)
で、条件式(boy!"仲間")を、左の項に合わせてキャストすると(boy!int("仲間"))となって、
結果、条件式(boy!0)の判定になっているのだと思います。

だから

boy=0 if "仲間"!boy : mes "おまえは敵だ0" boy=1 if "仲間"!boy : mes "おまえは敵だ1"
とすると、
条件式でのキャストが、("仲間"!"0")という判定になって、正しく動作するというわけです。



スペース

リンク

2016/5/31(Tue) 14:08:42|NO.75664

自分もVelgailさんの説明で合っていると思います。
例えば以下のような計算式も左の型によって結果が変わるので、思わぬバグが発生する事があります。

a=2.5;double型 b=5;int型 mes a*b mes b*a



沢渡

リンク

2016/5/31(Tue) 14:09:26|NO.75665

自動的に型変換が行われる仕様って、気持ち悪いと思うのは私だけでしょうか?
予期せぬ誤動作を防ぐという意味でも、私だったら

str(boy)!="仲間"
と、手動で型変換を行いますね。



Velgail

リンク

2016/5/31(Tue) 14:46:28|NO.75666

それを言うと、私の場合手動型変換とかの前に
違う型同士で比較しようとは思わないというのがさきに来ちゃうので……

型が違うもの同士の比較ということは、本質的には大体の場面でおかしいので。



USER

リンク

2016/5/31(Tue) 18:35:53|NO.75667

数字と文字の比較なので
質問自体違和感ありですね・・



GEN3

リンク

2016/6/1(Wed) 13:58:52|NO.75668

皆さま、回答ありがとうございました。
言われてみれば納得です。勝手に型変換されることを常に意識しておかないと
思わぬところでドツボにはまりそうですね。



Velgail

リンク

2016/6/1(Wed) 16:45:30|NO.75669

ただ、この質問のおかげで若干興味が湧いたので、テストコードを書いてみました。

a=3 b=3.5 if(a<b){ mes "a<b" }else{ mes "a>=b" } if(b>a){ mes "a<b" }else{ mes "a>=b" }
今回の件を知らないでボーッと書いてたら間違えるでしょこれ……(各自実行してみるといいかも)



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