Rust使用evalexpr执行带条件的字符串表达式报AppendedToLeafNode错误如何解决
错误触发原因
你遇到的AppendedToLeafNode错误是evalexpr 5.x版本的语法限制导致的:该版本不支持将if条件表达式直接作为let赋值语句的右值,解析器处理let x = if ...结构时,会把if节点尝试追加到已经解析完成的赋值语句叶子节点上,不符合语法树构造规则,因此抛出该错误。
带条件判断的字符串表达式实现方案
Rust完全可以实现带条件判断的字符串表达式计算,针对evalexpr库有两种可行方案:
- 方案1:升级依赖版本
evalexpr 6.0及以上版本已经优化了语法支持,允许if表达式作为赋值右值使用,你只需要将Cargo.toml中evalexpr的依赖版本升级到6.0+,原有代码无需修改即可正常运行。 - 方案2:兼容5.x版本的写法
如果你需要保持当前evalexpr 5.x版本不变,可以将if表达式替换为库支持的三元运算符写法,修改后的表达式为:
替换后原有代码可直接正常执行,输出结果为3。let evalstr = "let x = input == 8 ? 3 : 4";
修改后的完整兼容5.x版本的代码示例:
use evalexpr::*; fn main() { let evalstr = "let x = input == 8 ? 3 : 4"; let mut context = HashMapContext::new(); context.set_value("input".into(), 8.into()).unwrap(); eval_empty_with_context_mut(evalstr, &mut context).unwrap(); let val = context.get_value("x").unwrap(); println!("{}", val); }
内容的提问来源于stack exchange,提问作者bosscar
相关产品推荐
相关产品推荐

