如下代码尝试测试在私有函数`\__debug_analysis:N`中定义的局部私有变量(常量)`\l__debug_tl`的作用域,结果发现在一次循环(`map`映射)完成后,局部变量仍存在定义。
...
如下代码尝试测试在私有函数`\__debug_analysis:N`中定义的局部私有变量(常量)`\l__debug_tl`的作用域,结果发现在一次循环(`map`映射)完成后,局部变量仍存在定义。
如下代码共报错2次`\l_@@_tl`已定义。
要如何实现真正意义上的**局部**呢?
```tex
\documentclass{ctexbook}
\makeatletter
\ExplSyntaxOn
\begin{document}
%<@@=debug>
\cs_new:Npn \@@_analysis:N #1 {
\tl_const:Nn \l_@@_tl {#1} %测试局部定义的变量
\l_@@_tl %直接输出
}
\seq_set_from_clist:Nn \l_@@_seq {我,爱,你}
\seq_map_function:NN \l_@@_seq \@@_analysis:N %测试map函数的映射方式
\end{document}
\ExplSyntaxOff
\makeatother
```
此问题主要矛盾是必须要在函数内定义其他变量或函数,从而形成类似于函数闭包的结构,以实现更为复杂的算法功能。如下先定义再赋值的解决方案可以不用给出
```tex
%<@@=debug>
\tl_new:N \l_@@_tl %在外面定义
\cs_new:Npn \@@_analysis:N #1 {
\tl_set:Nn \l_@@_tl {#1} %在里面赋值
\l_@@_tl%直接输出
}
\seq_set_from_clist:Nn \l_@@_seq {我,爱,你}
\seq_map_function:NN \l_@@_seq \@@_analysis:N%测试map函数的映射方式
```
一周热门 更多>