Monday, April 21, 2008

今回は比較演算子でちょっとした実験を行ってみたいと思います。

比較演算子の説明は「比較演算子(PowerShell 入門)」を参照願います。

下記のように数値の2と2を-eq演算子で比較した場合、当然これは等しいのでTrueが返されます。

PS > 2 -eq 2
True

では、次のように数値の2と文字列"2"を比較したらどうなるでしょうか?

PS > 2 -eq "2"

この結果はTrueとなります。

ではなぜTrueとなるのでしょうか?

これはPowerShellがスカラー比較を行うためです。(スカラー比較とは2も"2"も同一視すること)

では、下記のようにキャストして比較してみたらどうなるか

PS %gt; [int]2 -eq [string]"2"
True

これも結果としては同じ値と見なされてしまい、Trueを返します。

下記のように数値型と文字列型(GetType()メソッドは型を返します)の比較はスカラー比較は適用できないため、Falseが返されます。

PS > (2).GetType() -eq "2".GetType()
False
Monday, April 21, 2008 10:31:33 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [2]  |  Trackback
Wednesday, April 30, 2008 12:25:22 AM (Tokyo Standard Time, UTC+09:00)
こんにちは、入海です。
HIROさんのPowerShell入門を徐々に読ませていただいていますが、このスカラー比較私もPowerShell in Actionという本で見たことがあります。静的言語に慣れている人たちにとっては面食らうでしょうね。PowerShellでどうしてこのスカラー比較を採用したのかをご存知ですか?多分その本に書いてあったかもしれませんが、覚えてません。orz

調べて分かったら報告します。
Wednesday, April 30, 2008 12:08:25 PM (Tokyo Standard Time, UTC+09:00)
たしかリダイレクト演算子に>や<が使用されるからだったと思います。
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: