1

我想知道是否可以将 LINQ 与 NLua 一起使用?我搜索了各种来源,包括项目的github 页面,但没有任何运气。我得到了以下最小的 C# 示例:

using (var lua = new Lua())
{
    lua.LoadCLRPackage();
    lua["data"] = new[] { 1, 2, 3, 4, 5 };
    var res = lua.DoFile(@"C:\..\MyLua.lua");
}

MyLua.lua看起来像这样:

luanet.import_type('System.Linq')

-- syntax error near 'in'
res = from d in data where d > 2 select d

-- ')' expected near '='
res = data:Where(x => x > 2)

return res

执行时,语法错误(如上面 lua 脚本中的注释所示)由 NLua 返回。很高兴知道这是否是设计使然,如果是这样,未来的 NLua 版本是否将支持 LINQ?

4

1 回答 1

2

LINQ 是一种“语言集成查询”:集成是这里的关键,即 C# 语法支持符合 LINQ 语法和语义的结构。

NLua 并没有改变 Lua 的语法(更不用说语义),它只是使 Lua 中的 .NET 库可用,使从 C# 运行 Lua 脚本变得容易,并使两种语言之间的数据交换变得容易。那么,NLua 不支持您的 LINQ 查询是设计使然吗?嗯,有点!NLua 在设计上不会更改或扩展 Lua 语法。

未来的版本会支持吗?好吧,任何未来都是漫长的,谁能预测未来呢?即使当前的维护人员说不,他们也可以决定在几个月内放弃该项目,让另一个认为这是个好主意的开发人员接管它。所以你问题的那部分没有答案。

综上所述,答案仍然是肯定的,您可以使用 Lua 中的 LINQ:在发布到 Lua 的 C# 函数中创建 LINQ 查询,然后从 Lua 中调用它们。诚然,这还不错,但仍然不如您可能想要做的那样强大,即在您的 Lua 代码中创建 LINQ 而无需编译 C# 代码。我不认为这是可能的,虽然我隐约记得有一种方法可以即时编译 C# 代码,但我可能是在做梦。

于 2013-12-04T03:03:33.553 回答