将 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.
之后调用该函数来验证参数(或做任何需要的事情)
我对 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.