考虑一下你有10个布尔变量,其中一次只能有一个是真的,每次开启任何一个,所有其他人都必须关闭#39;。立即出现的问题之一是;
如何在没有必要的情况下快速测试哪个变量是真的 每次必须线性检查所有变量状态?
为此,我在想是否有可能有这样的东西:
switch(true)
{
case boolean1:
//do stuff
...
//other variables
}
这看起来像测试一个对象的10种不同状态的坏方法,但我认为在这种情况下这种功能可能有用,并且想知道是否有任何编程语言支持这种功能?
答案 0 :(得分:2)
没有提供此行为的语言功能。但作为替代方案,您可以将命令模式与优先级队列结合使用。这假设您可以优先考虑应该进行哪些检查。
答案 1 :(得分:1)
传统上,当你有这样的radio button布尔值时,你使用一个整数来表示它们:
+------------+---------+--------------------+
| BINARY | DECIMAL | BINARY-LOGARITHMIC |
+------------+---------+--------------------+
| 0000000001 | 1 | 0 |
| 0000000010 | 2 | 1 |
| 0000000100 | 4 | 2 |
| 0000001000 | 8 | 3 |
| 0000010000 | 16 | 4 |
| 0000100000 | 32 | 5 |
| 0001000000 | 64 | 6 |
| 0010000000 | 128 | 7 |
| 0100000000 | 256 | 8 |
| 1000000000 | 512 | 9 |
+------------+---------+--------------------+
让我们调用保存此布尔值flag
的变量。我们可以通过索引随机访问函数数组来快速跳转到基于flag
的代码:
var functions = [ function0
, function1
, function2
, function3
, function4
, function5
, function6
, function7
, function8
, function9
];
functions[flag](); // quick jump
但是,您必须支付函数调用开销。