如何为编号规则一致的file_state.testing#.foo变量编写单个switch语句
可行实现方案
原生switch语法本身不支持直接用格式化字符串动态匹配变量名,你可以通过抽离公共逻辑的方式实现需求,不需要重复编写switch代码块,不同开发场景下可选方案如下:
1. 支持动态属性访问的语言(JS/TS/Python等)
直接通过字符串拼接动态取对应属性值,再走统一switch逻辑:
// 传入编号动态取值 const currentFoo = file_state[`testing${testing_num_var}`].foo switch(currentFoo) { case 1: // 处理逻辑 break case 2: // 处理逻辑 break default: }
2. 静态编译语言(C/C++/Java等)
有两种可选实现方式:
方式A:抽离公共处理函数
把相同的switch逻辑封装成独立函数,每个变量直接调用即可,后续修改逻辑只需要改一处:
// 公共处理逻辑,仅需编写一次 void handleFoo(int fooVal) { switch(fooVal) { case 1: // 处理逻辑 break; case 2: // 处理逻辑 break; default: ; } } // 调用时无需重复写switch handleFoo(file_state.testing1.foo); handleFoo(file_state.testing2.foo); handleFoo(file_state.testing3.foo); handleFoo(file_state.testing4.foo);
方式B:封装动态取值函数
如果需要传入编号动态调用,先写统一的取值函数,再走switch逻辑:
// 封装取值逻辑,仅需编写一次 int getFooByNum(int testNum) { switch(testNum) { case 1: return file_state.testing1.foo; case 2: return file_state.testing2.foo; case 3: return file_state.testing3.foo; case 4: return file_state.testing4.foo; default: return -1; } } // 按编号动态调用,完全符合你设想的使用方式 switch(getFooByNum(testing_num_var)) { case 1: // 处理逻辑 break; case 2: // 处理逻辑 break; default: ; }
如果是C/C++场景,还可以用宏批量生成调用代码,进一步减少重复代码量:
// 定义宏模板 #define HANDLE_TEST_FOO(n) handleFoo(file_state.testing##n.foo) // 批量调用仅需一行一个编号 HANDLE_TEST_FOO(1); HANDLE_TEST_FOO(2); HANDLE_TEST_FOO(3); HANDLE_TEST_FOO(4);
内容的提问来源于stack exchange,提问作者tora231
相关产品推荐
相关产品推荐

