假设我们有一个名为 的非空序列\l_tmpa_seq
。我们想为该名称分配一个\l_tmpb_seq
值,该值是调用类似以下函数的结果
\int_eval:n {#1 + 1}
在序列的每个成员上。
因此采取
\seq_set_eq:Nx \l_tmpb_seq { \l_process_cs:N \l_tmpa_seq }
在哪里
\cs_new_protected:Npn \l_process_cs:N #1
{
% Assign #1 to \l_name_seq
% Process the sequence \l_name_seq
% ...
% Leave / return the sequence \l_name_seq
}
和(为简洁起见,可能是一个自定义函数)
\cs_generate_variant:Nn \seq_set_eq:NN { Nx }
现在我求助于
- 改变传递给该函数的第二个参数或
\seq_use:Nn \l_name_seq {some_delimiter}
在命令式语言中作为语句调用return
来序列化结果并\seq_set_split:Nnn \l_another_seq {#1} {some_delimiter}
作为赋值语句调用。
我想完全避免第一种方法,而第二种方法虽然麻烦,但承认句法结构喜欢
\cs_return:N \l_name_seq
可以以单子方式完成,并且
\seq_let:Nx \l_another_seq {\l_someFunction:N #1}
我将实现它来看看它是如何工作的。
当将函数结果分配给范围之外的变量时,如何返回、序列化和评估函数结果?