
Wie kann ich die Funktion daran hindern, den Rest des Codes auszuführen, wenn in Latex3 bestimmte Bedingungen erfüllt sind?
Jetzt muss ich verschachtelte Bedingungen erstellen und einige Standardfälle duplizieren. Die Lesbarkeit des Codes wird schlechter, wenn der Standardfall recht groß ist.
\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
Hier ist, was ich in Bezug auf die Programmiersprache haben möchte
function(arg){
if(condition 1){
return <first case>;
}
if(condition 2){
return <second case>;
}
return <default case>;
}
Antwort1
Es gibt mehrere Möglichkeiten, dies zu erreichen. Ich würde wahrscheinlich einen prädikatbasierten Ansatz und eine verzögerte Auswertung verwenden:
\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
In komplexeren Fällen würde ich die „Nutzlast“ (Aktionen) normalerweise in Hilfsprogramme packen.
Wenn Sie auf das Format „Return“ festgelegt sind, benötigen Sie ein Endmarker-Token
\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}
aber ehrlich gesagt würde ich bei Prädikaten und entsprechenden Hilfsverben bleiben.