您好!
首先非常感觉您提供一个很好的开源项目。我在使用时遇到这个的问题,我感觉是一个Bug但不确定。
以下是我的测试脚本:
rule "test01" "test" begin
a =1.0 x=0.0
b = req.GetArgs(@name,0)
x = a + b + 2000
end
参数InArgs是在初始化req结构时定义好的,通过注入的req结构方法来获得每个规则执行时的输入参数。
//Request . 规则请求结构
type Request struct {
//当前账户系统信息
pubstruct.AccountInfo
// 规则执行设置 [规则名][参数1~n]
InArgs map[string][]interface{}
}
func (me *Request) GetArgs(ruleName string, idx int) interface{} {
if v, ok := me.InArgs[ruleName]; ok {
return v[idx]
}
return nil
}
规则在执行到math.go 第49行时报错,程序终止,原因是因为req.GetArgs 返回的是一个interface{} 【实际是float64】
if strings.HasPrefix(bkind, "int") { // 这里会放行所有int,interface也会放行 我在测试时 bkind刚好是interface
return a.Float() + float64(b.Int()), nil //math.go:49
}
我已修正了GetArgs的返回类型,目前运行正常。以上报告供您参考。
再次感谢
浙江嘉兴 老李
您好!
首先非常感觉您提供一个很好的开源项目。我在使用时遇到这个的问题,我感觉是一个Bug但不确定。
以下是我的测试脚本:
rule "test01" "test" begin
a =1.0 x=0.0
b = req.GetArgs(@name,0)
x = a + b + 2000
end
参数InArgs是在初始化req结构时定义好的,通过注入的req结构方法来获得每个规则执行时的输入参数。
//Request . 规则请求结构
type Request struct {
//当前账户系统信息
pubstruct.AccountInfo
// 规则执行设置 [规则名][参数1~n]
InArgs map[string][]interface{}
}
func (me *Request) GetArgs(ruleName string, idx int) interface{} {
if v, ok := me.InArgs[ruleName]; ok {
return v[idx]
}
return nil
}
规则在执行到math.go 第49行时报错,程序终止,原因是因为req.GetArgs 返回的是一个interface{} 【实际是float64】
if strings.HasPrefix(bkind, "int") { // 这里会放行所有int,interface也会放行 我在测试时 bkind刚好是interface
return a.Float() + float64(b.Int()), nil //math.go:49
}
我已修正了GetArgs的返回类型,目前运行正常。以上报告供您参考。
再次感谢
浙江嘉兴 老李