「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@242) [低] [解決]
@242■ (#673) 空と0(=いいえ、オフ)が比較構文で同一視される - NON (2009-04-28 22:36) /高 未処理
【症状】変数に「0」が入っているにもかかわらず、「もし」構文で空と同一視される
【再現方法】
あ=""
'あ=「あいう」でも同じです
い=オフ
'い=0 でも同じですが、い="0"では正常です

もしあがいならば
  「あ=い」と言う
違えば
  「あ≠い」と言う

【要望】基本構文である条件分岐が狂うのは大変困るので修正してください。
【バージョン】1.519
【その他】

22:24追記
空だけでなく、どのような文字列でも同じと扱われるようです。なお、"0"と括った場合は正常です。
変数の型の問題かとも思いましたが、1や2では正常に動作します。
0の場合だけおかしな動作をします。この"0"は命令で返される"0"でも同様(おかしい)です。

22:34追記2
文字列など=0 という順番でのみ発生するようです(0= では発生しない)。評価式として扱われているのでしょうか?
とりあえず代替方法(比較順を入れ替える)が存在しますので優先度を1つ落とします。

(#674) 文字列と数値の比較 - 焼きそば (2009-04-28 23:21) /高 未処理
条件分岐「もし、AがBならば」を使用したとき、Bの型で比較されるとどなたかが書かれていたような気がします。
例えば、A(文字列)、B(数値)の場合は数値で比較され、逆にA(数値)、B(文字列)の場合は文字列で比較されます。

今回の場合、あ(="",文字列)とい(=0,数値)なので数値で比較されます。
INT("")とすると0が返ってくることから、空は数値変換すると0だと思われるので、0と0を比較するので「真」が返ってきます。

間違ってましたらどなたかつっこみお願いします。

(#675) 一応原因はわかりましたが… - NON (2009-04-28 23:47) /低 未処理
すばやい返信ありがとうございます。
こちらの問題のコードを調べたところ、

もし行(=0です)が「」ならば

となっていました。空との比較ではAに当たる方の型で比較される、ということでしょうか…?
あ="あいう"がINT(あ)で0と返されましたので、原因はこれみたいです。

一応優先度を下げておきますが、うっかり間違う方もいそうな仕様なので、何かしら対応していただきたく思います。
たまたま代入された数字の「0」と文字列を比較する、というのも十分考えられる状況ですので…。

(#676) Bで比較されているのではないかと - 焼きそば (2009-04-29 00:21) /低 未処理
> もし行(=0です)が「」ならば

> となっていました。空との比較ではAに当たる方の型で比較される、ということでしょうか…?

もし、行(=0,整数)が「」(=空,文字列)ならば、ですので文字列で比較されていると思います。
0を文字列にすると「0」ですので、0と空を比較すると違っているので0が返ると思います。
ですのでBで比較されていると思います。「思います」ばかりですみません。

行=0#数値
もし行が「」ならば
  「真」と言う
違えば
  「偽」と言う#こちらが表示されます

(#677) とりあえず解決に - NON (2009-04-29 19:51) /低 解決
お騒がせしております。

サンプルの挙動も仰られるとおりでした。
他に似たような場所が無いかと探したところ別の条件分岐があり、
とりあえず双方にTOSTR()を用いることでトラブルは解消いたしました。

このままにすると迷惑をかけそうなので解決とします。
ご教授ありがとうございます。

(#673)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能