带有 argparse 的 fish 函数的命名参数

Posted

技术标签:

【中文标题】带有 argparse 的 fish 函数的命名参数【英文标题】:Named argument for fish function with argparse 【发布时间】:2019-06-18 21:02:03 【问题描述】:

fish function 内置选项-a/--argument-names 允许将参数绑定到名称。

在使用 argparse 内置函数的同时仍然可以这样做吗?如果有,怎么做?

【问题讨论】:

【参考方案1】:

我设计并实现了argparse。是的,从技术上讲,您可以在同一个函数中使用--argument 标志和argparse,但这样做没有任何意义。 --argument 选项完全独立于argparse 运行,并且不知道标志。创建以下函数:

function x -a arg1 -a arg2
    set --show arg1 arg2 argv
end

现在调用它:x --flag val arg。请注意,--flag 绑定到 arg1val 绑定到 arg2argv 仍然包含传递给函数的所有参数。如果你的函数有标志,你不应该使用--argument。如果不是,那么使用argparse 就没有任何意义。

【讨论】:

嗯嗯。功能请求时间。 @0az 您希望两者如何互动?正如我已经说过的,如果您的函数识别短标志或长标志,您应该使用argparse 而不是--argument。而--argument 本身在任何情况下都不是真正需要的。它只是在函数内部执行set -l arg1 $argv[1]set -l arg2 $argv[2] 等的语法糖。看看一些使用argparse 的标准自动加载函数;例如,alias.fish. 具体来说,是向 argparse 添加位置参数的功能请求。这只是糖,但它鼓励使用更具可读性的名称。 @0az argparse 完成后 $argv 删除了所有非位置参数;即,它将仅包含位置参数。因此,如果给它们提供有意义的名称可以提高函数的清晰度,只需在 argparse 调用之后执行 set -l var_name1 $argv[1] 等。我怀疑以这种方式使argparse 复杂化是否合理。特别是因为您必须为位置参数的数量与 var 名称的数量不匹配时发生的情况定义规则。

以上是关于带有 argparse 的 fish 函数的命名参数的主要内容,如果未能解决你的问题,请参考以下文章

模板函数与带有自动参数的命名 lambda

python argparse命名位置参数?

如何在单元测试中使用 argparse 参数调用函数?

使用其他命名空间/字典更新 argparse 命名空间

JAVA抽象类的定义与使用

函数的参数