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