簡體   English   中英

Drools 規則取決於來自 JDK Map 的知識(不在非 JDK 類中)

[英]Drools Rule depending on Knowledge from JDK Map (not within non-JDK Class)

我正在嘗試編寫以下規則,這取決於以下main中提供的知識,該知識僅使用 JDK [庫] 映射(而不是非庫類中的映射)。 但它似乎不起作用......

主要方法:

Map<String, Float> mapa = new HashMap<String, Float>();
mapa.put("Height", (float)1.73);
mapa.put("Weight", (float)79.0);
mapa.put("BMI", mapa.get("Weight") /
                (mapa.get("Height") * mapa.get("Height")));
ksession.insert(mapa);

規則.drl:

rule "Low BMI"
    when
        $map : (Map(values("BMI")) < 18.0)
    then 
        System.out.println("You have a low BMI");
end

我想比較規則前提條件中 BMI 的值,如果這個條件為真,那么我想顯示下面的消息。

怎么了?

你應該這樣寫:

when
    $map: Map(this["BMI"] < 18)
then

它應該工作:)

通常,請參閱 Drools 文檔7.8.3.3.10。 列表和地圖訪問部分...

FWIW:盡管該參考文獻中沒有提到下面更簡化的語法,但我偶然發現 [至少在 Drools 6.2.0 ] 這是有效的(至少對於Map<String, Boolean> ,在ObjectUnderSpecification ):

rule "you rule name"
when
  ObjectUnderSpecification(mapKey == true)
then
  // RHS code
end

我已經測試過它可以工作。 顯然,鍵所在的 Map 的名稱甚至不需要被引用......我想只要ObjectUnderSpecification中的某些Map 具有鍵,那么這就是進一步評估的內容。 如果您發現一個反映了我在上面發現的軼事,請在任何參考文獻中發表評論或編輯。

(我不知道這是否可以與嵌套地圖類似地工作)。

我想這種類型的語法也可能適用於問題here中的Map<String, Float> ,類似這樣(但我還沒有測試過這個):

when
  $map: Map(BMI < 18)
then

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM