Lua argparse:具有多个参数的选项的转换器函数?

Lua argparse:具有多个参数的选项的转换器函数?,lua,command-line-arguments,argparse,Lua,Command Line Arguments,Argparse,我想对一个选项的参数应用不同的转换函数 考虑以下代码: parser:option('-c --circle') :argname{'<radius>', '<coordinates>'} -- does not work like this: -- :convert{['<radius>']=tonumber, ['<coordinates>']=tocoords} :default{1, {0,0}} :args(

我想对一个选项的参数应用不同的转换函数

考虑以下代码:

parser:option('-c --circle')
   :argname{'<radius>', '<coordinates>'}
   -- does not work like this:
   -- :convert{['<radius>']=tonumber, ['<coordinates>']=tocoords}
   :default{1, {0,0}}
   :args(2)
   :count '0-1'
parser:option('-c--circle')
:argname{“”,'}
--不是这样工作的:
--:convert{['']=tonumber,['']=tocoords}
:默认值{1,{0,0}
:args(2)
:计数“0-1”
如您所见,该程序有一个选项
-c
,该选项接受两个参数:
半径
坐标
。我想分别应用于不同的转换函数(
tonumber
tocoords
)。阅读我不知道该怎么做


这可能吗?如果可能,那么正确的设置方法是什么?

如果您认为Lua Argparse系统不允许您指定多个函数来将参数转换为特定选项,那么仍然可能有一种方法。毕竟,Argparse必须为每个参数调用一次转换函数。并且没有规则规定转换函数必须对每个调用执行相同的操作。你唯一没有的信息就是调用它的特定参数

所以。。。欺骗。使用Lua的一流函数创建该信息(注意:以下使用Lua 5.3):

局部函数多参数解析器(…)
本地索引=0
本地funcs=表.pack(…)
返回函数(…)
索引=索引+1
返回函数[索引](…)
结束
结束
解析器:选项('-c--circle')
:argname{“”,'}
:convert(多参数解析器(tonumber,tocoords))
:默认值{1,{0,0}
:args(2)
:计数“0-1”

如果Argparse为每个参数准确调用一次
convert
函数,并按照参数在命令行中出现的顺序对参数调用
convert
,则这将起作用。Argparse几乎肯定不能保证这一点,但这是一个合理的假设。

因为Argparse 0.6.0可以工作:

:convert{tonumber, tocoords}
见:

如果元素的convert属性是一个函数数组,那么当元素接受多个参数时,它们将用作相应参数的转换器


我建议使用。它支持通过传递给方法的转换器方法进行转换。此外,它还附带其他方便的特性,如断言和默认值

:convert{tonumber, tocoords}