这个知识点很小,小到你每次读它的时候都不会太以为然,不会太当回事,然而,实际上编程时却容易忘记或者忽略这个如此"简单"的知识点。
如果做一个简单的重试功能,就会用到一个while循环,重试内容的结果一般都是确定的,比如一直重试,直到重试内容返回ok或者success为止,返回任何其他内容都将继续重试。
这个时候,你就在while循环外面声明了一个变量,比如str='notok',接下来你会怎么做呢?把它当作重试内容函数的一个形参传到函数里面去?然后用while(!str is 'ok')来判断什么时候结束??那就大错特错了,原因就是如图所示,形参值的改变并不能外部实参变量的值,那么就会死循环了(如果重试方法不抛运行时异常的话)。
那么正确的方法应该怎么写呢?
1、外部声明一个变量;(和前面讨论的一样)
2、我们不把这个变量当作重试方法的形参,而是把函数方法的结果返回到外面来,即return出来;
3、这样只有一个变量,就可以用上面的while条件判断了。
附上一个彩蛋: 循环里面加个sleep,这样的重试才不会把cpu占死,每循环一次,让出来一会儿cpu。