解决 GDL 配置冲突

尽管 GDL 分析程序会自动修改配置以避免违反约束,但请记住以下信息,以便分析程序知道你的意图。

例如,如果传递到分析器函数的配置包含 Weather.Rain, Today.Sunday, Health.Well 的参数设置,则上一节中的无效组合可以通过更改此约束中命名的任何一个参数的设置来解决。 分析程序必须决定要更改的参数设置。 在许多情况下,你可能知道应更改哪个设置。 通常,更重要的参数保持不变。 在这种情况下,可以通过将参数分别更改为 Weather:Sunny、Today:Monday 或 Health:Sick 来消除冲突。 大多数人会更喜欢首先改变天气,今天第二,并希望避免改变健康。

*ConflictPriority 指令使你能够指定要在冲突中更改哪个参数的首选项。 *ConflictPriority 接受一个正整数值,该值指定每个参数的相对重要性。 当两个或更多个参数发生冲突时,分析程序将使用较低的优先级修改参数的参数设置。 此指令符合最高优先级项用最小序号标记的常见用法。 因此,应为最高优先级参数分配 *ConflictPriority: 1。 为*ConflictPriority: 选择的值不需要是连续的,但它们应是唯一的。 *ConflictPriority 应显示为 *Feature 构造的子条目。

*FeatureType 指令也会影响参数的优先级。 *FeatureType 实际上是特定于 GPD/Unidrv 的关键字 (keyword) 。 对于非 Unidrv 客户端,只需设置 *FeatureType: PARAMETER_PROPERTY。 此设置将避免将来出现意外行为。 *FeatureType 应显示为 *Feature 构造的子条目。

当 GDL 更改参数的设置来解决冲突时,它将使用默认设置,除非该设置也受到约束。 在某些情况下,你可能希望分析程序在解决不同配置下的冲突时使用不同的默认设置。 若要设置此类不同的默认设置,请在 Switch 和 Case 指令或一组嵌套的 Switch Case 指令中定义多个 *DefaultOption 指令。 分析程序将在给定当前配置的情况下评估 Switch 和 Case,以确定要使用的 *DefaultOption。 由于解析程序算法确定从最高优先级 (即最小序号) 开始的参数设置,因此优先级低于所评估参数的优先级的参数的设置是未知的。 必须确保包含 *DefaultOption 指令的任何 Switch 构造都使用具有更高优先级的参数, (即,其序号) 小于使用 *DefaultOption 定义其默认值的参数。 如果不遵守此规则,分析程序函数将失败。 由于这种困难,应尽可能避免在 Switch 和 Case 构造中插入 *DefaultOption。

可以调用 ResolveConstraint () 分析程序接口函数来显式检查约束冲突的配置,并解决冲突(如果找到任何冲突)。 新配置将返回到调用方。 然后,调用方可以检查配置是否可接受,也可以使用配置获取快照。 快照指示哪些参数设置受在其创建时指定的配置的约束。 此信息对于创建用户界面的客户端可能很有用。