許多人在腳本語言中使用下面的符號,但我不太明白它是如何工作的。||和&&返回值符號的工作?
~$ false || echo "aa"
aa
~$ true || echo "aa"
~$ true && echo "aa"
aa
~$ false && echo "aa"
~$
雙方首先執行,然後評估其返回值?
什麼是更直接的方式來寫這些?
是||
的XOR
?
許多人在腳本語言中使用下面的符號,但我不太明白它是如何工作的。||和&&返回值符號的工作?
~$ false || echo "aa"
aa
~$ true || echo "aa"
~$ true && echo "aa"
aa
~$ false && echo "aa"
~$
雙方首先執行,然後評估其返回值?
什麼是更直接的方式來寫這些?
是||
的XOR
?
使用&&
和||
來控制評估是 編程中非常基本的東西。正如許多人已經回答的那樣,他們正在使用「短路評估」。
在某些語言中,它們與and
和or
相同,但不是全部。在例如 他們做的紅寶石不是的意思完全一樣(據我所知)。
什麼會是一個更直接的方式來寫這些?
可以說,使用&&
和||
代替if ... else
是懶惰 編程,但有些人會說,使用&&
和||
結構 最直接的。
如果你將有一個替代(或的一種方式更好地理解這種):
expr && echo "aa"
# is the same as
if expr; then
echo "aa"
fi
和
expr || echo "aa"
# is the same as
if ! expr; then
echo "aa"
fi
和
expr && echo "yes" || echo "no"
# is the same as
if expr; then
echo "yes"
else
echo "no"
fi
,當然是一個組合
if this && that; then
echo "yes"
else
echo "no"
fi
「短路評估」是一個非常重要的規則,並且在某些 情況下,代碼取決於此。
在這個例子中(從VIM,但它同樣在許多語言)會有一個異常,如果它不工作:
if exists("variable") && variable == 3 ...
如果雙方決定着結果之前評估會有一個 如果未定義variable
,則爲例外。
已經有一些糟糕的設計語言,例如, &&
是 評估結果給出之前,他們沒有那麼好玩的使用。
所以:
if you like it; then
use it && be happy
else
use it || be happy
fi
||
是一個OR(不是XOR)。
使用腳本(與源代碼一樣),僅在必要時評估右側。
與||
如果LHS評估爲假或0,則評估RHS。僅當LHS評估爲真時,RHS才進行評估。
這是因爲true ||任何事情總是如此,所以沒有必要評估RHS。而虛假& &任何事情總是假的。
||
和&&
在你列出的所有語言懶惰。
它的工作方式是從左到右評估表達式。在||
的情況下,整個表達式的值是不是「false-y」的第一個參數的值(或者如果所有參數都是false-y,則爲最後一個參數)將是表達式的值。
除了在Python中'||'是'或','&&'是'和' – Volatility 2013-02-19 10:08:54
@Volatility是的,當然。 – tom 2013-02-19 10:09:41
我覺得這很簡單。
每次首先評估左側,如果需要評估右側。
在第一種情況下,LHS爲false
,因此表達式的結果取決於RHS,因爲它是OR
操作。因此評估/執行右側。
在第二種情況下,LHS是true
,並且OR
操作的結果將是true
不管什麼是有在RHS,所以RHS不會求/執行。
與AND
操作發生同樣的事情。只有在LHS爲true
的情況下,才需要評估RHS。
''||只是'或',具有短路的功能 – Volatility 2013-02-19 10:05:14
[短路評價](http://en.wikipedia.org/wiki/Short- circuit_evaluation) – raina77ow 2013-02-19 10:05:48
「||」不是「異或」,而是「或」。不像'OR','XOR'不能被短路。 – Bruno 2013-02-19 10:08:38