【问题标题】:Using "Not in" in drools decision table在口水决策表中使用“不在”
【发布时间】:2015-06-02 19:47:17
【问题描述】:

如何在drools决策表中使用“不在”范围内的值?

例如,我有一个名为HMT_HomeInfo.get("HM").Value 的方法,其值为

368.00-368.99、V72.0-V72.9、369.00-369.99、366-367.99、7430-743.99。

【问题讨论】:

  • 您自己的问题 (!) stackoverflow.com/questions/29492825/…stackoverflow.com/questions/29993404/… 充分回答了这个问题。如果没有,请提供示例代码,显示这些答案未解决的问题。
  • 我将其标记为答案。谢谢提醒:)
  • 您能告诉我如何在决策表中使用 not in 运算符吗?
  • 当然:它与运算符in 相同(如果我错了,请原谅),您似乎很熟悉和舒适。但是,对于 范围,您需要将运算符 <=>=<>&& 结合使用,以匹配不在任何范围范围内的值。跨度>
  • 那么,语法会不会是 HMT_HomeInfo.get("HM").Value not in (>= 368.00 &&

标签: drools drools-guvnor


【解决方案1】:

如果$v是一个绑定到你需要测试的值的变量,那么

! ("368.00" <= $v && $v <= "368.99" ||
   "V72.0"  <= $v && $v <= "V72.9" ||
   ...
   "743.00  <= $v && $v <= "743.99" )

是一个表达式,如果 $v 不在这些区间之一中,则返回 true。

请注意,这些比较使用 string 比较,当这些字符串包含看起来像数字的内容时,它可能会或可能不会返回您期望的结果。

【讨论】:

  • 它抛出错误“输入不匹配'!'在规则中”
  • 您可能在规则中放错了位置。
  • $h: HMT_HomeInfo.get("HM").Value !( >= '36800' && = '36900' && = '366' && = '7430' &&
  • 这不是根据 Drools 语法的模式。 Drools 文档中的第 7.8.3.2 节解释了这一点 - 放入评论太长了。
【解决方案2】:

我找到了一个解决方案,方法是在 CONDITION 中提供我不想包含的值范围,然后在该范围下方包含“False”,如图所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多