获取以键为变量的项目

获取以键为变量的项目

我正在尝试检索存储在变量中的指定键的值。通常我们会使用 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参数的命令嵌套在另一个参数中。节x5.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

相关内容