這個(gè)知識(shí)點(diǎn)很小,小到你每次讀它的時(shí)候都不會(huì)太以為然,不會(huì)太當(dāng)回事,然而,實(shí)際上編程時(shí)卻容易忘記或者忽略這個(gè)如此"簡(jiǎn)單"的知識(shí)點(diǎn)。
如果做一個(gè)簡(jiǎn)單的重試功能,就會(huì)用到一個(gè)while循環(huán),重試內(nèi)容的結(jié)果一般都是確定的,比如一直重試,直到重試內(nèi)容返回ok或者success為止,返回任何其他內(nèi)容都將繼續(xù)重試。
這個(gè)時(shí)候,你就在while循環(huán)外面聲明了一個(gè)變量,比如str='notok',接下來你會(huì)怎么做呢?把它當(dāng)作重試內(nèi)容函數(shù)的一個(gè)形參傳到函數(shù)里面去?然后用while(!str is 'ok')來判斷什么時(shí)候結(jié)束??那就大錯(cuò)特錯(cuò)了,原因就是如圖所示,形參值的改變并不能外部實(shí)參變量的值,那么就會(huì)死循環(huán)了(如果重試方法不拋運(yùn)行時(shí)異常的話)。
那么正確的方法應(yīng)該怎么寫呢?
1、外部聲明一個(gè)變量;(和前面討論的一樣)
2、我們不把這個(gè)變量當(dāng)作重試方法的形參,而是把函數(shù)方法的結(jié)果返回到外面來,即return出來;
3、這樣只有一個(gè)變量,就可以用上面的while條件判斷了。
附上一個(gè)彩蛋: 循環(huán)里面加個(gè)sleep,這樣的重試才不會(huì)把cpu占死,每循環(huán)一次,讓出來一會(huì)兒cpu。

