将 argparse 的使用移到单独的函数中

move argparse use into separate function

我对 argparse 的功能有疑问。我将 argparse 用于自定义函数,这很棒,但有时我想将 argparse 和补充代码的使用移动到一个单独的函数中,并在那里使用它来减少样板/视觉噪音。

这是我想做的部分示例:

function A

  set --local options ... # some definition.

  argparse_wrapper --name A $options -- $argv; or return 1

end

而不是

function A

  set --local options ... # some definition.

  argparse --name A $options -- $argv; or return 1

  # Code validating flags set by argparse in some way that argparse is unable to do,
  # i.e. validation that requires values from two flags (so f/flag!script would not
  # work).
  #
  # Or, changing flag names to names more appropriate inside the function.
  #
  # Other boilerplate related to options, but 
  # unrelated to the purpose of the function.
  #

end

但是,我无法在函数内部设置值并将这些值无缝传输给调用者。如同,argparse 在外部作用域中设置值(调用 argparse 的函数),但我无法对我自己的自定义 argparse 包装器执行相同的操作。至少,如果有一种干净的方法,我不确定该怎么做。特别是,argparse 可以在其外部范围内设置局部变量,我想将该功能保留在假定的 argparse 包装器中。这可能吗?

我是设计和实施 argparse 的人。我推荐的方法是您可以在 share/functions/fish_opt.fish 模块中找到的方法。在实现命令的函数中执行argparse。使用 --no-scope-shadowing 标志定义辅助函数,使其可以直接访问父函数中的变量。然后在 argparse returns.

之后调用该函数来验证参数(或做任何需要的事情)