请教 github.com/antonmedv/expr 有没有人用过
小白求问。最近在做表达式算法,发现expr 插件有人会用吗、code里面的all(Tweets, {.Len <= 8}) 和.Len分表代表什么呢
package main
import "github.com/antonmedv/expr"
type Tweet struct {
Len int
}
type Env struct {
Tweets []Tweet
}
func expt(){
code := `all(Tweets, {.Len <= 8})`
program, err := expr.Compile(code, expr.Env(Env{}))
if err != nil {
panic(err)
}
env := Env{
Tweets: []Tweet{{42}, {98}, {69}},
}
output, err := expr.Run(program, env)
if err != nil {
panic(err)
}
fmt.Println(output)
// 会输出false
}
已经明白了、非常抱歉占用大家资源了
env := make(map[string]interface{}, 1<<6)
env["age"] = 0
env["age_new"] = 1
program, err := expr.Compile("age == age_new", expr.Env(env))
if err != nil {
panic(err)
}
output, err := expr.Run(program, env)
if err != nil {
panic(err)
}
fmt.Println(output)
// 输出 false
func max(a,b interface{} ,i ,j int64) int64{
ta := reflect.TypeOf(a)
tb := reflect.TypeOf(b)
if ta == tb {
if a == b {
return i
} else {
return j
}
} else {
var va, vb float64
switch ta.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16,
reflect.Int32, reflect.Int64:
va = float64(reflect.ValueOf(a).Int())
case reflect.Float32, reflect.Float64:
va = reflect.ValueOf(a).Float()
default:
return j
}
switch tb.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16,
reflect.Int32, reflect.Int64:
vb = float64(reflect.ValueOf(b).Int())
case reflect.Float32, reflect.Float64:
vb = reflect.ValueOf(b).Float()
default:
return j
}
if va == vb {
return i
} else {
return j
}
}
return j
}
func qexp(){
env := make(map[string]interface{}, 1<<6)
env["max"] = max
env["age_new"] = 1
env["age_old"] = 12
program, err := expr.Compile("max(age_new,age_old,0,1)", expr.Env(env))
if err != nil {
panic(err)
}
output, err := expr.Run(program, env)
if err != nil {
panic(err)
}
fmt.Println(output)
// 输出1
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
已经解决了