2018-10-16
閱讀量:
1794
R語言
它們是Logical Operators(邏輯運(yùn)算符)
區(qū)別之一
當(dāng)然,如果只計(jì)算兩個(gè)標(biāo)量(長度為1的向量),他倆似乎是差不多的:
TRUE?&?FALSE
##?[1]?FALSE
TRUE?&&?FALSE
##?[1]?FALSE
如果計(jì)算的是兩個(gè)向量的話,結(jié)果就明顯不同:
c(TRUE,?FALSE)?&?c(TRUE,?TRUE)
##?[1]??TRUE?FALSE
c(TRUE,?FALSE)?&&?c(TRUE,?TRUE)
##?[1]?TRUE
區(qū)別在于,& 依次比較兩個(gè)向量中的對應(yīng)元素,而&&只比較兩個(gè)向量的首個(gè)元素。 &&的這種偷懶的做法確保了它的計(jì)算結(jié)果只為一個(gè)標(biāo)量,TURE或FALSE。這就使他 可以與if等只接受一個(gè)標(biāo)量為參數(shù)的函數(shù)完美搭配起來。
區(qū)別之二
說到偷懶,和&相比,&&偷懶的地方還不止這一處:
a?#對象a不存在
##?Error?in?eval_r(expr,?envir,?enclos):?找不到對象'a'
FALSE?&?a
##?Error?in?eval_r(expr,?envir,?enclos):?找不到對象'a'
FALSE?&&?a
##?[1]?FALSE
在進(jìn)行比較時(shí),&& 如果發(fā)現(xiàn)左邊對象的值為FALSE,那么他就不會計(jì)算右邊的對象了,(因?yàn)闊o論 右邊對象的值為多少,邏輯與的結(jié)果總為FALSE)所以即使右邊對象不存在時(shí),也沒有拋出錯(cuò)誤。而 &就老實(shí)多了,計(jì)算完左邊后他還會計(jì)算右邊,而右邊對象不存在,于是拋出錯(cuò)誤。&&的這種計(jì)算方法 叫做短路計(jì)算。
如果好奇&&是怎么偷懶的,可以查看它的源代碼,這里略去。






評論(0)


暫無數(shù)據(jù)
CDA考試動態(tài)
CDA報(bào)考指南
推薦帖子
0條評論
0條評論
0條評論