7

我需要在 DSLR 文件的“何时”部分执行一个方法,但我不确定它是否可能。例子:

rule "WNPRules_10"
  when
    $reminder:Reminder(source == "HMI")
    $user:User(isInAgeRange("30-100")==true)
    Reminder(clickPercentual >= 10)
    User(haveAtLeastOptIns("1,2,3,4") == true)
  then
    $reminder.setPriority(1);update($reminder);
end

(注意:isInAgeRange() 和 hasAtLeastOptIns() 是 User 的方法)

我尝试使用 eval() 并没有出现错误,但它没有执行。像这样:

rule "WNPRules_10"
 when
  $reminder:Reminder(source == "HMI")
  $user:User(eval($user.isInAgeRange("30-100")==true))
  Reminder(clickPercentual >= 10)
  User(eval($user.haveAtLeastOptIns("1,2,3,4") == true))
 then
  $reminder.setPriority(1);update($reminder);
end

我该如何解决这个问题?

4

1 回答 1

9

您的第二次尝试看起来相当混乱-还有-您是否有用户模式-您是否希望它们引用同一个用户实例?或者它们可以是单独的实例(或者它们必须是单独的吗?) - 在某些情况下,这会根据您的意图有所改变。

就我能想到的最简单的重写而言:

  rule "WNPRules_10"
  when
    $reminder:Reminder(source == "HMI")
    $user:User()
    eval($user.isInAgeRange("30-100") && $user.haveAtLeastOptIns("1,2,3,4"))
    Reminder(clickPercentual >= 10)
  then
    $reminder.setPriority(1);update($reminder);
  end

注意 eval() 顶级元素的使用——它也只使用一种用户模式——然后对其应用约束。(在未来的版本中,内联 eval 将无需编写 eval !)。

于 2010-03-25T03:11:31.157 回答