我重写与脚本支持现有的模板溶液作为表达式树,而不是解释AST每个执行的运行和所述逻辑具有对使用现有的脚本。的表达式树,如何切换对于返回的数据类型(字符串,整数,浮点)
什么我想,现在实现的是创建一个解决方案来测试真实。
Ex。空值或空值的字符串被认为是false,因为它是0,绝对值低于0.0001的任何十进制值。 “true”和“false”是他们所说的,不区分大小写,而字符串“null”是错误的。
唯一有效的输入类型是float,int,string和bool。要编译可以工作到表达式树
任何解决方案是有效的,我已经有一个现成的方法来测试一个对象,但无法找到任何很好的例子调用外部方法。
每个例子都可以使用常量值或不接受任何参数。
更新
我建立使用“Expression.ABC”方法树,但有一个问题,资金的方式在结果的表达式的类型(字符串,整数,浮点)可切换树。
当前语法存储一切为字符串并解析成int,并根据操作浮动,如果失败返回默认值。
其内置的是故障安全和总是成功的,产生的结果,即使在模板语法错误提供。
更新
实施例(不是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":
}
}
}
* 更新*改变标题
我正在使用表达式构建树。语法,但我找不到切换表达式结果类型的方法。如果我有一个Add或multiply或concatenation,我将如何切换结果的类型(int,float,string),而不是表达式的类型(Add,Multiply,concat)? –
今天晚些时候我会试着创建一个例子。 –
当我试图重新将它作为一个例子时,我发现我想做的事情在表达式树中几乎不可能做到,所以我放弃了解决方案,并开始使用新的设计。 –