7
votes

Bave: Comment utiliser un énumé dans la LHS d'une règle?

J'ai des difficultés à écrire une règle qui correspond à une valeur d'énorme dans sa LHS.

Par exemple, si j'ai l'énum suivant: p> xxx pré>

i Voudrais l'utiliser dans quelque chose comme ceci: P>

rule "my rule"
dialect "java"
    when        
        status : EStatus()                      // --> this works, but I want to be more specific
        // status : EStatus(this == EStatus.OK) // --> doesn't work. How can I make it work?
    then
        // ...
end


0 commentaires

4 Réponses :


11
votes

Cela fonctionne pour moi: xxx

de sorte que cela devrait fonctionner aussi: xxx

vérifier s'il se produit toujours dans les boursnes 5.3 et le fichier Un bug s'il fait dans Jira


1 commentaires

Merci de le pointer. Maintenant, cela fonctionne aussi pour moi. C'est étrange, parce que j'ai vérifié plusieurs fois la question avant de la publier ici. Le plus probable quelque chose a glissé ...



0
votes

J'ai essayé d'utiliser Enum sur lhs [ticket (Status == estatus.ok), je reçois une erreur de temps de compilation Quelque chose comme suit:

BuilderRor: Impossible d'analyser l'expression Statut == Estatus.ok ERREUR: Impossible de résoudre la méthode à l'aide du mode strict: ....

Solution:

en règle LHS, nous devons comparer avec une valeur constante ... Par exemple: Utilisateur: Utilisateur (âge> 60) - Nous comparons ici l'âge avec une valeur constante 60.

Donc pour utiliser Enum, Ticket (Statut == Estatus.ok) ... je J'ai dû utiliser une certaine constante à la place d'Estatus.ok pour la comparer avec le statut. Pour cette raison, j'ai utilisé une méthode statique dans Enum.

Donc, le LHS de la règle ressemble maintenant à: Ticket (Statut == Estatus.getstatus (1))

et ESTATUS Enum est comme suit:

Publique Enum Estatus { xxx

estatus (int numéro) { cela.Value = nombre; } xxx

}

J'ai testé cela à l'aide de JDK 1.6 et à la fois dans l'environnement Linux et Windows.

aime coder! < / p>


0 commentaires

0
votes

Une autre solution. Vous devez juste ajouter Getter dans l'Estatus Enum comme ci-dessous.

rule "my rule"
when
    EStatus(value == EStatus.OK)
then
    ...
end


0 commentaires

0
votes

Cela devrait également faire l'affaire:

rule "my rule"
when
    $status : EStatus()
    eval ( $status == EStatus.OK )
then
    ...
end


0 commentaires