2017年12月27日 星期三

[VFP] 關於等號 = 和雙等號 = = 的差別

在VFP中等號 = 和雙等號 = = 代表的意義是不同的
雖然兩者在比較數字時是沒有任何差別的
但如果是在比較字串時所代表的意義就完全是不一樣的
*需要注意的是比較的兩邊資料類型必須相同,即使是 1="1" 程式也會跳錯誤
且兩邊都不能是.NULL. ,如果有任何一邊是.NULL. ,程式也只會回傳.NULL.


ex
*字串部分
 ?"ABCD" =  "ABC"  結果: .T.
 ?"ABC"  = "ABCD"  結果: .F.
 ?"ABCD" == "ABC"  結果: .F.
*數字部分
 ?1=2 結果: .F.
 ?1==2 結果: .F.

這邊可以直觀看出=和= =在比較字串上的不同
(等號=)在比對字串意義上是代表  由(等號=)的右邊字串 從左邊字串 的最左邊開始比對,只要在右邊字串結束前都相同就是.T.

(雙等號==)在比對字串意義上是代表 必須左右兩邊的字串完全相同才是.T.
(包含空白,長度,內容都要一樣)

*然而因為(等號=)的比對方式,這邊會衍生出一種較特殊的狀況
?"ABCD" = ""    結果: .T.


不管(空字串"")去和任何字串去做等號相比 (空字串"" 在等號右邊的情況下), 都會返回.T.
這邊其實也可以看成不管任何字串的最左邊都有空字串在那邊,所以不管怎麼比對都應該會是.T.
----------------------------------------------------------------------
再補充一些東西
(SET EXACT ON) 指令
這項指令可以在功能選項 Tools -> Options -> Data 裡面可以做調整
預設上是關閉(OFF)的狀態,可以在這邊將其打開

也可以打在程式碼上來開啟功能
ex
SET EXACT ON
?"ABCD" =  "ABC"  結果: .F.
?"ABC"  = "ABCD"  結果: .F.
?"  ABC" =  "ABC"   結果: .F.
?"ABC"  = "ABC   "  結果: .T.
?"ABC   " =  "ABC"  結果: .T.


SET EXACT ON: 代表將(等號=)兩邊進行等長比對,而比對的方式是將兩邊字串較短方的'尾部'補上空白再進行比對

由上面這些例子可以看出一些端倪
第一個 "ABCD" =  "ABC" 在經過 SET EXACT ON 後結果從原本的 .T. 變成 .F.
這邊其實可以看成是 "ABCD" == "ABC " 這樣就很能很容易看出結果為 .F.

而這項指令對於(雙等號==)是沒有影響的,一樣必須兩邊字串完全相同才是 .T.
(包含空白,長度,內容都要一樣)
如果要關閉掉這項功能,也只要在程式碼打上 SET EXACT OFF 即可



沒有留言:

張貼留言