我正在重写具有脚本支持的现有模板解决方案以作为表达式树运行,而不是在每次执行时都解释 AST,并且逻辑必须与现有脚本一起使用。
我现在想要实现的是创建一个解决方案来测试真实性。
前任。为 null 或空的字符串被视为 false,因为 0 和绝对值低于 0.0001 的任何十进制值。“true”和“false”就是他们所说的,不区分大小写,字符串“null”为false。
唯一有效的输入类型是 float、int、string 和 bool。
任何可以用于要编译的表达式树的解决方案都是有效的,我已经有一个现有的方法来测试一个对象,但找不到任何好的例子来调用外部方法。
每个示例要么适用于常量值,要么不接受任何参数。
更新
我正在使用“Expression.ABC”方法构建树,但在资助一种方法来切换表达式树的结果类型(字符串、整数、浮点数)时遇到问题。
当前语法将所有内容存储为字符串并根据操作解析为 int 和 float,如果失败则返回默认值。
它构建为故障安全并且始终成功生成结果,即使在模板中提供了错误的语法。
更新
示例(不是 100 % 准确,而是举例说明当前的解释器)
string Evaluate(Expr e) {
switch(Expr.Type) {
case "istrue":
ExprValue value = Evaluate(Expr.Child);
switch(value.Type) {
case "String":
if(String.IsNullOrWhiteSpace(value.ToString()) || value.ToString().ToLower() == "false" || value.ToString().ToLower() == "null" || value.ToInt() == 0) return false;
case "Int":
return value.ToInt() != 0;
case "Float":
}
}
}
*更新 *更改标题