2015-03-02 5 views
0

У меня есть ситуация, когда мне нужно игнорировать любое значение атрибута во время выполнения.Игнорировать значение атрибута динамически в правилах слюни

$applicant : Applicant ($age : age, $gender : gender, $income : income) 
$person : Person(age == $age, gender == $gender, income == $income) 

Скажите в атрибуте дохода, я говорю ЛЮБОЕ значение; это означает, что если der - любое значение, указанное в атрибуте дохода приложения, то это нормально, иначе оно должно выполнить правило, потому что ЛЮБОЕ значение приемлемо.

Пожалуйста, помогите осуществить это.

Благодаря

+0

Нужна дополнительная информация: что вы здесь делаете. Вышеприведенный код аналогичен двойному циклу, .i.e. для каждого объекта типа Applicant сравнивает его с каждым объектом Type Person, если определенные атрибуты совпадают. Это то, что вы пытаетесь сделать? –

+0

да, но, как я уже упоминал, в некоторый момент времени значение дохода равно 0, а доход от человека - 1000, а также ЛЮБОЙ означает, что объект человека будет принимать 1000 в качестве дохода или любой стоимости. Это означает, что мне нужно проверить только два предыдущих атрибута, а затем, если третий атрибут ЛЮБОЙ, мне нужно проигнорировать эту проверку. – Kumar

+0

Ответил ниже в комментариях, дайте мне знать, если это поможет. –

ответ

1

Для динамического коммутатора вам нужен другой объект, PersonControl с булевыми атрибутами:

$applicant : Applicant ($age : age, $gender : gender, $income : income) 
PersonControl($igAge: igAge, $igGender: ifGender, $igIncome: igIncome) 
$person : Person(age == $age || $igAge, 
        gender == $gender || $igGender, 
        income == $income || $igIncome) 

Возможно, вам придется вставить/втянуть (или изменить) PersonControl для каждой оценки Заявителя, если эти оценки должны быть b e сделано индивидуально.

Если вы хотите указать значение как любое, вам придется подумать о значении, которое вы можете использовать для этого, например. -1 для числовых значений:

$applicant : Applicant ($age : age, $gender : gender, $income : income) 
$person : Person(age == $age , 
        gender == $gender, 
        income == $income || == -1) 
+0

. Каково использование escape-символов, так как это «атрибутName» == «некоторое значение». Когда я читал в доке, я не понял его. Спасибо за ваше время. – Kumar

+0

attributeName находится в escape-символах ''. – Kumar

+0

Вы спрашиваете о правилах редактирования комментариев StackOverflow ??? – laune

-1

Вы можете просто назначить заявителю $applicant, а затем сделать установку $age и $gender в then пункте:

rule "do application" 
when 
    $applicant : Applicant() 
    $person : Person(age == $age, gender == $gender, income == $income) 
then 
    $age = $applicant.getAge() 
    // do more stuff 
end 
0
$applicant : Applicant ($age : age, $gender : gender, $income : income) 

$age : age является назначение, таким образом, что $age можно отнести позже. и аналогично полу и доходам.

$person : Person(age == $age, gender == $gender, income == $income) 

Здесь вы проверяете возраст каждого заявителя на каждый объект человека и аналогично полу и доходу. Поэтому, чтобы игнорировать любой из них, просто отбросьте их из проверки равенства.

i.e Так что удалите условия, которые вы не хотите сравнивать для равенства, например. игнорировать доход:

rule "Compare Applicants" 
salience 155 
when 
    $applicant : Applicant ($age : age, $gender : gender) 
    $person : Person(age == $age, gender == $gender) 
then  
// do stuff 
end 

Чтобы игнорировать все, т.е. сравнить каждый заявитель с каждым человеком и выполнить then пункт

when 
$applicant : Applicant() 
    $person : Person() 
then 
// do your stuff 
end 
+0

Прошу прокомментировать мой комментарий, дорогой. Мне нужно указать атрибуты в состоянии WHEN. – Kumar

+0

Я дал фрагмент, отредактированный в любом случае, чтобы включить код в том случае, когда, а затем завершите его. –

+0

@Kumar Но без ограничения (например, 'доход = = $ income') из условного элемента - способ выразить, что * любое значение соответствует *. – laune