各种语言都有类似的结构
选择; 当 <表达式 1> 时 <动作 1>; 当 <表达式 2> 时 <动作2>; ... 当 <表达式 n> 时 <动作 n>; 否则; <动作错误>; 结尾;
或者
if (<表达式 1>) { <操作 1> } elsif (<表达式2>) { <操作 2> } ... elsif (<表达式 n>) { <动作 n> } 别的 { <动作错误> }
用于评估一系列表达式并执行表达式评估为真时执行的第一个操作。我原本希望 expl3 内核包含 \case:n 和 \case:nTF 来实现此目的,但事实并非如此。是否有任何正在进行的工作来添加这样的构造?
答案1
构建这样的结构很容易,我可能没有很正式的命名方案,但可以安排
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\def\zz#1\zzz{}\def\zzz{}
two ~true ~just ~do ~first ~
aaa ~ \bool_if:nT {\int_compare_p:n{3=1}} {3 ~ is ~ 1\zz}
\bool_if:nT {\int_compare_p:n{3=2}} {3 ~ is ~ 2\zz}
\bool_if:nT {\int_compare_p:n{3=3}} {3 ~ is ~ 3\zz}
\bool_if:nT {\int_compare_p:n{3=4}} {3 ~ is ~ 4\zz}
\bool_if:nT {\int_compare_p:n{1=1}} {1 ~ is ~ 1}
\zzz \ bbb
\par
one ~true ~
aaa ~ \bool_if:nT {\int_compare_p:n{3=1}} {3 ~ is ~ 1\zz}
\bool_if:nT {\int_compare_p:n{3=2}} {3 ~ is ~ 2\zz}
\bool_if:nT {\int_compare_p:n{3=4}} {3 ~ is ~ 4\zz}
\bool_if:nT {\int_compare_p:n{3=4}} {3 ~ is ~ 4\zz}
\bool_if:nT {\int_compare_p:n{1=1}} {1 ~ is ~ 1}
\zzz \ bbb
\par
none ~true ~
aaa ~ \bool_if:nT {\int_compare_p:n{3=1}} {3 ~ is ~ 1\zz}
\bool_if:nT {\int_compare_p:n{3=2}} {3 ~ is ~ 2\zz}
\bool_if:nT {\int_compare_p:n{3=4}} {3 ~ is ~ 4\zz}
\bool_if:nT {\int_compare_p:n{3=4}} {3 ~ is ~ 4\zz}
\bool_if:nT {\int_compare_p:n{1=4}} {1 ~ is ~ 4}
\zzz \ bbb
\ExplSyntaxOff
\end{document}