AppleScriptのような言語は、データ型(つまり、実際に意味するのではなくデータの表現方法の仕組み)について馬鹿馬鹿しく思います。 do shell script
コマンドをタイプtext
(別名string
、Unicode text
)の値を返しますが、その後、あなたの二行目は、タイプinteger
の値に対してそれを比較します。SANE、人道的な世界では
"3" = 3
何ので、この比較はtrue
を返しますあなた平均は明らかです。悲しいかな、プログラミングの世界はまじめではなく、人道的なことはまれであり、大部分の人間を欲求不満にまで抑えるレベルの歩道が必要です。この場合、2つの値を比較する前に、両方が同じ(または同等の)タイプであることを確認する必要があります。あなたが数値比較を実行したい場合たとえば、:時にはそれが自動的に変換(強制)を実行するため
set variable1 to (do shell script "cd /Volumes; ls | wc -l") as integer
variable1 = 3
AppleScriptは、その場合、あなたはそのat
を使用する必要があり、そうでない他の倍ながら、ここでは二重に混乱しています演算子は値を明示的に変換(キャスト)します。
...
ああ、AppleScriptのは、数値の比較は、それは「親切」あなたが必要なの値を強制変換されます、それはそうでもな状況で、テキストの比較を実行することにより、ルールに異なる実行することにより、ルールあなたが作業している値のタイプに特別な注意を払う必要があります。そうしないと、もっと邪悪で紛らわしいバグが簡単に見つかる可能性があります。例えば
:
34 > 5 --> true
この最初のテスト戻りtrue
予想されるように、数34は数よりも大きいように5
"34" > "5" --> false (?)
テキスト比較は、2つのテキストの値を比較文字バイしたがって、2番目のテストでは、 "3"が "5"の前に来るので、false
が返されます。(=
)-等しく、(≠
)演算子-等しくないとは異なり
さらに、>
、<
、≥
、及び≤
オペレータはそれらを比較する前に、同じタイプへのオペランドを強制か:
34 > "5" --> true
"34" > 5 --> false
どちらの場合でも、オペレータは、左オペランドと同じ型に右オペランドを強制的に変換してから、数値(最初の場合)またはテキスト(二番目の)規則に従って比較します。このような振る舞いは、言語設計上の瑕疵や「疣贅」として丁寧に記述することができます。あなたは左のオペランドがされる値の種類にもわからないが、それはルールの正しいセットを使用して比較され、絶対に確認するには
、最初にそれに適切な強制を適用します。
(variable1 as number) > 5
(variable1 as text) > "5"
出典
2017-02-12 12:44:41
foo
それはひどいかもしれない、あなたはWindows CMD.EXEになる可能性があります –
応答に感謝します。今はとても分かりやすいようですが、おそらく私はそれを得ていないでしょう。あなたのご親切に感謝します! :) – user7439349