【发布时间】:2020-11-22 19:57:04
【问题描述】:
有谁知道比 NCalc 更新的表达式求值器?上一个版本是在 2011 年,并且(非常)快速的 Google 搜索几乎没有返回任何我能看到的结果。
【问题讨论】:
-
您可以尝试find a fork that someone else maintains或自己滚动。我很幸运 fork NCalc-Edge(它也恰好在 NuGet 中)。
有谁知道比 NCalc 更新的表达式求值器?上一个版本是在 2011 年,并且(非常)快速的 Google 搜索几乎没有返回任何我能看到的结果。
【问题讨论】:
我知道这是一个迟到的回应,但为了其他人的利益,也许是为了你自己。你看过罗斯林吗?我相信微软现在正在自己使用它。您可以传递简单的 c# 或 vb.net 表达式来评估完整代码。下面的示例显示了一个简单的数学问题。
ScriptEngine roslynEngine = new ScriptEngine();
Roslyn.Scripting.Session session = roslynEngine.CreateSession();
session.AddReference("System.Web");
session.ImportNamespace("System");
session.ImportNamespace("System.Web");
var result = (session.Execute("1 + 1"));
【讨论】:
github 上有一个 fork here,它是最新的。
目前我不知道质量是否更好。
【讨论】:
我完全理解这个答案有多晚,但是我想提出我的解决方案,因为如果有人希望跨多个平台使用表达式,我相信它可以在使用 NCalc 的公认答案之上添加更多内容。
-- 更新--
我已经为 C# 创建了一个解析器,并计划在接下来的几个月内为 Java 和 Swift 实现它。这意味着您可以在多平台上评估表达式,而无需针对每个平台进行调整。
虽然 Java 和 Swift 是计划好的,但它从来没有成为一个完全成熟的版本。相反,现在支持.NET Standard 启用对Xamarin 应用程序的支持。
-- 结束更新 --
Expressive 是一种工具,可在以下位置获得: GitHub 或 Nuget。
该网站上有相当多的文档,但为了防止链接失效,这里有一个如何使用它的示例:
变量支持
var expression = new Expression("1 * [variable]");
var result = expression.Evaluate(new Dictionary<string, object> { ["variable"] = 2);
功能
var expression = new Expression("sum(1,2,3,4)");
var result = expression.Evaluate();
它旨在尽可能地匹配 NCalc,但它增加了对“null”关键字等内容的支持。
此答案与Expressive answer 重复。我已经复制了它以防链接失效。
【讨论】:
【讨论】:
我知道这是一个非常晚的回应(晚了 7 年)
有一个分支仍在开发中,可在此处获得: https://github.com/ncalc/ncalc
【讨论】: