From e2ab2a1077b0bab915e31b108570d939ef7b4f18 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Thu, 16 Oct 2025 11:58:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=8F=98=E9=87=8F=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E6=97=B6=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Matcher/DefineVariableMatcher.cs | 25 +++++++++++++++++++------ RScriptContext.cs | 15 ++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Matcher/DefineVariableMatcher.cs b/Matcher/DefineVariableMatcher.cs index f3d9018..b3cbbe7 100644 --- a/Matcher/DefineVariableMatcher.cs +++ b/Matcher/DefineVariableMatcher.cs @@ -4,15 +4,28 @@ namespace Convention.RScript.Matcher { public class DefineVariableMatcher : IRSentenceMatcher { + private readonly Regex DefineVariableRegex = new(@"(string|int|double|float|bool|var)\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)"); + private readonly Regex DeclareVariableRegex = new(@"(string|int|double|float|bool|var)\s+([a-zA-Z_][a-zA-Z0-9_]*)"); + public bool Match(string expression, ref RScriptSentence sentence) { - Regex DefineVariableRegex = new(@"(string|int|double|float|bool|var)\s+([a-zA-Z_][a-zA-Z0-9_]*)"); - var DefineVariableMatch = DefineVariableRegex.Match(expression); - if (DefineVariableMatch.Success) { - sentence.mode = RScriptSentence.Mode.DefineVariable; - sentence.info = new() { DefineVariableMatch.Groups[1].Value, DefineVariableMatch.Groups[2].Value }; - return true; + var DefineVariableMatch = DefineVariableRegex.Match(expression); + if (DefineVariableMatch.Success) + { + sentence.mode = RScriptSentence.Mode.DefineVariable; + sentence.info = new() { DefineVariableMatch.Groups[1].Value, DefineVariableMatch.Groups[2].Value, DefineVariableMatch.Groups[3].Value }; + return true; + } + } + { + var DeclareVariableMatch = DeclareVariableRegex.Match(expression); + if (DeclareVariableMatch.Success) + { + sentence.mode = RScriptSentence.Mode.DefineVariable; + sentence.info = new() { DeclareVariableMatch.Groups[1].Value, DeclareVariableMatch.Groups[2].Value, null }; + return true; + } } return false; } diff --git a/RScriptContext.cs b/RScriptContext.cs index c312358..fe0b46d 100644 --- a/RScriptContext.cs +++ b/RScriptContext.cs @@ -16,7 +16,7 @@ namespace Convention.RScript /// Expression, /// - /// 定义变量, 格式: 类型 变量名 + /// 定义变量, 格式: 类型 变量名 [=Expression] /// 类型支持: string, int, double, float, bool, var /// 每层命名空间中不可重复定义变量, 不可使用未定义的变量, 不存在时会自动向上查找上级空间的变量 /// @@ -166,38 +166,39 @@ namespace Convention.RScript // 定义变量 var varTypeName = sentence.info[0]; var varName = sentence.info[1]; + var varInitExpression = sentence.info[2]; Type varType; object varDefaultValue; { if (varTypeName == "string") { varType = typeof(string); - varDefaultValue = string.Empty; + varDefaultValue = varInitExpression == null ? string.Empty : varInitExpression; } else if (varTypeName == "int") { varType = typeof(int); - varDefaultValue = 0; + varDefaultValue = varInitExpression == null ? 0 : parser.Evaluate(varInitExpression); } else if (varTypeName == "double") { varType = typeof(double); - varDefaultValue = 0.0; + varDefaultValue = varInitExpression == null ? 0.0 : parser.Evaluate(varInitExpression); } else if (varTypeName == "float") { varType = typeof(float); - varDefaultValue = 0.0f; + varDefaultValue = varInitExpression == null ? 0.0f : parser.Evaluate(varInitExpression); } else if (varTypeName == "bool") { varType = typeof(bool); - varDefaultValue = false; + varDefaultValue = varInitExpression == null ? false : parser.Evaluate(varInitExpression); } else if (varTypeName == "var") { varType = typeof(object); - varDefaultValue = new object(); + varDefaultValue = varInitExpression == null ? new object() : parser.Evaluate(varInitExpression); } else {