大家好。
很多人都说 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,却还是一头雾水。
谢谢。