gengine icon indicating copy to clipboard operation
gengine copied to clipboard

规则语法里面是否支持for循环?

Open fxdgg opened this issue 4 years ago • 2 comments

请问gengine的规则里面,不支持for循环吗?只能通过下标一个个单独去访问吗?目前来看,我们只能遍历调用了,效率可能是个问题,多谢了哈

fxdgg avatar Jul 21 '21 09:07 fxdgg

不支持

rencalo770 avatar Jul 22 '21 06:07 rencalo770

可以支持一下,像grule这样的:

type MyPoGo struct { Name string }

func (p *MyPoGo) GetStringLength(sarg string) int { return len(sarg) }

func (p *MyPoGo) AppendString(aString, subString string) string { return fmt.Sprintf("%s%s", aString, subString) }

func TestCycleCallRule(t *testing.T) { drl := rule AgeNameCheck "test" { when Pogo.GetStringLength(Pogo.Name) < 100 then Pogo.Name = Pogo.AppendString(Pogo.Name, "Groooling"); } eng := NewRuleEngine() err := eng.Start() assert.Nil(t, err)

nodeName := "Pogo"

pogo := &model.MyPoGo{Name: "bobo"}

apis := make(rulengine.PropertiesMap)
apis["Pogo"] = pogo

err = eng.AddNode(nodeName, drl, apis)
assert.Nil(t, err)

err = eng.Execute(nodeName, true)
assert.Nil(t, err)

fmt.Println(pogo.Name)

}

tx7do avatar Mar 08 '22 17:03 tx7do