如果 latex3 中满足某些条件,我该如何停止函数运行其余代码?
现在我必须构建嵌套条件,并重复几个默认情况。如果默认情况非常庞大,代码的可读性就会变差。
\ExplSyntaxOn
\cs_set:Npn \my_func #1 {
\token_if_cs:NTF #1 {
\str_eq:nnTF {#1} {\\} {
first case
}{
\token_if_expandable:NTF #1 {
second case
}{
default
}
}
}{
default
}
}
\my_func{\\}
\ExplSyntaxOff
以下是我希望的编程语言
function(arg){
if(condition 1){
return <first case>;
}
if(condition 2){
return <second case>;
}
return <default case>;
}
答案1
有几种方法可以实现这一点。我可能会使用基于谓词的方法和惰性求值:
\ExplSyntaxOn
\cs_set:Npn \my_func:N #1
{
\bool_lazy_and:nnTF
{ \token_if_cs_p:N #1 }
{ \token_if_expandable_p:N #1 }
{
\str_if_eq:nnTF {#1} { \\ }
{ first case }
{ second case }
}
{ default }
}
\my_func:N { \\ }
\ExplSyntaxOff
对于更复杂的情况,我通常会将“有效载荷”(动作)放入辅助装置中。
如果你坚持使用“返回”格式,你需要一些结束标记
\cs_set:Npn \my_func:N #1
{
\token_if_cs:NF #1
{ \__my_func_return:nw { not-a-cs } }
\token_if_expandable:NF #1
{ \__my_func_return:nw { not-expandable } }
\__my_func_return:nw { default }
\__my_func_end:
}
\cs_new_eq:NN \__my_func_end: \prg_do_nothing:
\cs_new:Npn \__my_func_return:nw #1#2 \__my_func_end:
{#1}
但老实说,我会坚持使用谓语和适当的助动词。