Open gerdong opened 1 year ago
context := spel.StandardEvaluationContext{} m := make(map[string]interface{}) m["name"] = "lisi" m["age"] = 18 context.SetVariables(m) parser := expression.SpelExpressionParser{} expressionString := "#age>18" valueContext := parser.ParseExpression(expressionString).GetValueContext(&context) // 结果打印为true fmt.Println(valueContext)
貌似是这里Tokenizer中调用pushCharToken,放入的是一个 大于等于的算子
case ">": if t.isTwoCharToken(TokenKind{TokenKindType: GE, TokenChars: []rune(GE), HasPayload: len([]rune(GE)) == 0}) { t.pushPairToken(TokenKind{TokenKindType: GE, TokenChars: []rune(GE), HasPayload: len([]rune(GE)) == 0}) } else { t.pushCharToken(TokenKind{TokenKindType: GE, TokenChars: []rune(GE), HasPayload: len([]rune(GE)) == 0}) } break
在 InternalSpelExpressionParser的eatRelationalExpression方法中:
// 这里似乎有意把 > 当做 >=, < 当做 <= 处理,不知何意 if kindType == GT { eq := OpGE{Operator: &operator} return &eq, nil } if kindType == LT { eq := OpLE{Operator: &operator} return &eq, nil }
不太能够理解作者的意图
貌似是这里Tokenizer中调用pushCharToken,放入的是一个 大于等于的算子
在 InternalSpelExpressionParser的eatRelationalExpression方法中:
不太能够理解作者的意图