我正在尝试检索存储在变量中的指定键的值。通常我们会使用 Nx 来扩展变量,但\prop_item:Nx
会引发错误。如果键是变量,我该如何检索值?
! Undefined control sequence.
l.23 Value: \prop_item:Nx
\l__dict_prop {\tl_use:N \l__key_str}
! Undefined control sequence.
<argument> \LaTeX3 error:
A property list was misused.
梅威瑟:
\cs_generate_variant:Nn \prop_item:Nn { Nx } % Added
\prop_new:N \l__dict_prop
\prop_put:Nnn \l__dict_prop {1} {First}
Value: \prop_item:Nn \l__dict_prop {1} % Works fine
\\
\str_set:Nn \l__key_str {1}
Key: \str_use:N \l__key_str % Works fine
\\
Value: \prop_item:Nn \l__dict_prop {\str_use:N \l__key_str} % Works with added first line
%\str_set:Nx \l__value {\prop_item:Nx \l__dict_prop {\str_use:N \l__key_str}} % Not working
答案1
有些变体没有预先定义,因此您必须自己定义它们\cs_generate_variant:Nn
:
\cs_generate_variant:Nn \prop_item:Nn { Nx }
然后
Value: \prop_item:Nx \l__dict_prop { \str_use:N \l__key_str }
将工作。
在这种情况下,由于您要获取变量的值,因此V
也可以使用变量,因此
\cs_generate_variant:Nn \prop_item:Nn { NV }
进而
Value: \prop_item:NV \l__dict_prop \l__key_str
关于您的编辑:您尝试执行以下操作:
\str_set:Nx \l__value_str { \prop_item:Nx \l__dict_prop { \str_use:N \l__key_str } }
但是这行不通,因为使用x
扩展的命令是不可扩展的。也就是说,您不能像上面那样将带有x
参数的命令嵌套在另一个参数中。节x
5.3 变体介绍解释interface3
了不同的扩展类型,但简而言之,只有类型x
不能嵌套,因为它不可扩展。
您可以在这里使用可扩展的变体:V
或者e
可以工作(假设您已经按照\cs_generated_variant:Nn
上面的说明定义了它们):
\str_set:Nx \l__value_str { \prop_item:Ne \l__dict_prop { \str_use:N \l__key_str } }
% or
\str_set:Nx \l__value_str { \prop_item:NV \l__dict_prop \l__key_str }
或者您可以使用\prop_get:NnN
(:NVN
此处的变体):
\prop_get:NVN \l__dict_prop \l__key_str \l__value_str