带有 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
绑定到 arg1
,val
绑定到 arg2
,argv
仍然包含传递给函数的所有参数。如果你的函数有标志,你不应该使用--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 函数的命名参数的主要内容,如果未能解决你的问题,请参考以下文章