我有一个脚本,该脚本接受多个选项作为参数。有效选项列表可能很大(> 20),可能会导致冲突。是否有一种实用的方法可以将冲突的对象合并在一起,而又不将冲突的对象合并为另一个对象,而无需创建多个列表,组等。更改一个组将导致更改其他组。
例如,可用选项列表:-a, -b, -c, -d
以下选项冲突:[-a, -c], [-a, -d]
以下选项不会冲突:[-a, -b], [-c, -d]
编辑,一个更精确的示例:
例如,该脚本允许启动/停止特定任务,并具有用于创建/删除日志的其他选项。
正常开始看起来像:
./script -start Task -logFile C:\out.tmp
如果出现以下情况,脚本应通知用户:
由于./script -start Task -stop Task
和start
是两个相反的动作,因此执行stop
。
另一个冲突的动作:
./sript -start Task -logFile C:\out.tmp -deleteLog C:\out.tmp
,它将创建一个日志文件并同时将其删除
现在,如果选项为start, stop, logFile, deleteLog
,
以下内容可能会发生冲突:[start, stop], [logFile, deleteLog]
以下内容不会发生冲突:[start, logFile], [stop, deleteLog]
答案 0 :(得分:0)
让我们假设,在您编写源代码时,您可以决定如何组织参数以分析时间。例如(使用JSON表示法,您可以轻松地将其适应于C结构,Java枚举或您拥有什么),您可以注释可用的选项,以明确指出其中的哪些冲突:
const options = [
{
name: "start",
description: "starts foobaring the fizzbuzz",
parameters: [
{
name: "task",
type: "string",
optional: false,
description: "the type of task to foobar"
}
]
conflicts: ["stop"] // <-- explicit simple conflict detection
},
{ ... }
]
这将由命令行解析模块用于
parsedArgs
,以便parsedArgs['start']
对应于start
参数的参数(如果已指定)。请注意,可能存在其他冲突,在解析阶段可能不值得检测。例如,如果选项foo
的值必须大于bar
+ baz
,则最好在解析后对此事实进行编码检查,而不是使解析器复杂化以处理任意值。选项值之间的关系。