更好的测试方法是否恰好设置了一个标志

更好的测试方法是否恰好设置了一个标志

我有一个包,它的选项中有一系列布尔标志(目前大约 10 个),我想测试一下确切地其中一个设置为 true - 类似于 10+ 布尔值的 XOR。

我能想到的唯一方法是使用该ifthen包并构建一个巨大的语句来组合\and\or测试它,但它很快就会变得非常丑陋,并且将难以维护。

有一个更好的方法吗?

答案1

您可以创建一个计数器,为每个为真的布尔值添加一个,然后测试计数器是否具有值 1。

答案2

问题没有提供足够的信息来提供 精确的例行公事,正如 Willie Wong 所评论的那样,它可能试图用错误的数据结构来解决问题。

一种方法是将布尔值放在由零和一组成的变量中。如果任何一个布尔值为真,那么它将是一个大于零的数字。

\def\OneTrue#1{\ifnum#1<1 0\fi\number#1}

\OneTrue{1000101010}

上述宏的一个限制是,如果第一个布尔值为 1,则字符串只能为 10 位数字,否则数字会太大。根据布尔值的数量,可以扩展宏并将其拆分为两个,以避免此限制并解析两个参数。

之后如何处理它,这取决于具体情况。实际上,可以使用第一个为真的布尔值来触发另一个操作。在这种情况下,我们将重新发现ifcaseTeX 提供的 switch 数据结构!

相关内容