![理解“谓词必须可扩展”错误](https://linux22.com/image/444639/%E7%90%86%E8%A7%A3%E2%80%9C%E8%B0%93%E8%AF%8D%E5%BF%85%E9%A1%BB%E5%8F%AF%E6%89%A9%E5%B1%95%E2%80%9D%E9%94%99%E8%AF%AF.png)
我不明白这段代码的注释版本。\regex_match:nnTF
是不可扩展的,那么为什么要将由它派生的谓词定义为可扩展的?
\documentclass{article}
\ExplSyntaxOn
\regex_const:Nn\__erw_this_regex{(?:foo)}
\prg_new_conditional:Npnn
%^^A\prg_new_protected_conditional:Npnn
\__erw_regex_match:n #1 {p}
%^^A\__erw_regex_match_protected:n #1 {p}
{\regex_match_p:Nn\__erw_this_regex{#1}}
% LaTeX3 Error: Predicate '\__erw_regex_match_protected_p:n' must be
%
%--- TeX said ---
%(LaTeX3) expandable.
\ExplSyntaxOff
\begin{document}
\end{document}
答案1
expl3 的谓词是可以扩展为\c_true_bool
或 的宏\c_false_bool
。因此这些谓词必须始终可扩展,否则它们就不能用作谓词。
因此\prg_new_protected_conditional:Npnn \... {p}
始终是一个错误,因为它会定义一个不可能存在的不可扩展谓词。
由于同样的原因\regex_match_p:Nn
,它没有被定义:它不可扩展,所以它不能成为谓词。