【问题标题】:move argparse use into separate function将 argparse 使用移动到单独的函数中
【发布时间】:2019-08-03 01:54:40
【问题描述】:

我对@9​​87654321@ 的功能有疑问。我将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 包装器中。这可能吗?

【问题讨论】:

    标签: shell environment-variables fish


    【解决方案1】:

    我是设计和实现argparse 的人。我推荐的方法是您可以在 share/functions/fish_opt.fish 模块中找到的方法。在实现该命令的函数中执行argparse。使用--no-scope-shadowing 标志定义一个辅助函数,使其可以直接访问父函数中的变量。然后在argparse 返回后调用该函数来验证参数(或做任何需要的事情)。

    【讨论】:

    • 啊,那么用--no-scope-shadowing声明的函数可以在外部范围内操作变量吗?我可能误以为它可以读取它们,但不能写入。
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2019-12-29
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2012-01-29
    • 2012-10-16
    • 2021-01-17
    相关资源
    最近更新 更多