大家好。
很多人都說 if else 已經很夠用了,不需要 switch,
但 C 語言的 switch 有一個特點就是,如果每個 case 不加上 break,
就能夠繼續執行下方其他 case 的行為。
尤其寫 kernel module 的人,
應該常常會需要在 initial 階段控管初始化失敗時的狀況。
打個比方,很多開發者都會很喜歡用 goto。
int init_phase(){
char* errfunc = "functionNameHere";
if(init_process1() < 0){
errfunc = "init_process1";
goto fail_p1;
}
if(init_process2() < 0){
errfunc = "init_process2";
goto fail_p2;
}
if(init_process3() < 0){
errfunc = "init_process3";
goto fail_p3;
}
return 0;
init_process3:
release_process2();
init_process2:
release_process1();
init_process1:
printf("%s: initial failed.\n",errfunc);
return -1;
}
但不愛用 goto 的我就會改成以下:
int init_phase(){
char* errfunc = "functionNameHere";
int errOccur = 0;
if(!errOccur){
if(init_process1() < 0){
errfunc = "init_process1";
errOccur = 1;
}
}
if(!errOccur){
if(init_process2() < 0){
errfunc = "init_process2";
errOccur = 1;
}
}
if(!errOccur){
if(init_process3() < 0){
errfunc = "init_process3";
errOccur = 1;
}
}
if(!errOccur)
return 0;
switch(errfunc){
case "init_process3":
release_process2();
case "init_process2":
release_process1();
case "init_process1":
printf("%s: initial failed.\n",errfunc);
}
return -1;
}
抱歉,在 Python 板打這麼多 C 語言 @@"
不過我想表達的就如同上述,請問 Python 該怎麼做到類似的功能呢?
我正在改一位同仁的 Python,想運用類似 switch 的特點完成。
查到很多人都說可以用 dict,卻還是一頭霧水。
謝謝。