From cdf04acecf07326cd3e155a8b4ecbf9479c6f4b9 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Fri, 28 Nov 2025 17:34:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DoRunner/DefineVariableRunner.cs | 8 ++++---- Parser/ExpressionParser.cs | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/DoRunner/DefineVariableRunner.cs b/DoRunner/DefineVariableRunner.cs index 15d10b4..25f740a 100644 --- a/DoRunner/DefineVariableRunner.cs +++ b/DoRunner/DefineVariableRunner.cs @@ -84,22 +84,22 @@ namespace Convention.RScript.Runner else if (varTypeName == "int") { varType = typeof(int); - varDefaultValue = varInitExpression == null ? 0 : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0 : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(int)); } else if (varTypeName == "double") { varType = typeof(double); - varDefaultValue = varInitExpression == null ? 0.0 : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0.0 : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(double)); } else if (varTypeName == "float") { varType = typeof(float); - varDefaultValue = varInitExpression == null ? 0.0f : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0.0f : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(float)); } else if (varTypeName == "bool") { varType = typeof(bool); - varDefaultValue = varInitExpression == null ? false : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? false : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(bool)); } else if (varTypeName == "var") { diff --git a/Parser/ExpressionParser.cs b/Parser/ExpressionParser.cs index 4e717fa..2bee3e6 100644 --- a/Parser/ExpressionParser.cs +++ b/Parser/ExpressionParser.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System; using System.Linq; +using System.Diagnostics; namespace Convention.RScript { @@ -121,7 +122,10 @@ namespace Convention.RScript.Parser { if (CompileGenericExpression.TryGetValue(expression, out var result)) { - return (result as IGenericExpression).Evaluate(); + if (result is IGenericExpression genericExpression) + return genericExpression.Evaluate(); + else + return context.CompileGeneric(expression).Evaluate(); } return Compile(expression).Evaluate(); }