【问题标题】:Use object returned by Lua script使用 Lua 脚本返回的对象
【发布时间】:2019-07-25 17:13:51
【问题描述】:

我在“Conversion.lua”文件中有这个 lua 脚本:

local conversion = {}

function conversion.mmToin( value )
    return value * 0.0393701
end

return conversion

我需要在 C# 代码中使用函数 mmToin,包含在对象 conversion 中。

如果函数不在对象内部,我将使用以下代码:

Script scp = new Script();
scp.DoFile(GlobalConst.PATH_TO_SCRIPT_FOLDER + "Conversion.lua");
double resultFm = scp.Call(scp.Globals["mmToin"], 1).ToObject<double>();

但是如果我把它放在一个对象中,我就不能使用它;我试过了:

double resultFm = scp.Call(scp.Globals["conversion.mmToin"], 1).ToObject<double>();

但不工作。

如何在 C# 代码中使用 mmToin 函数? 谢谢。

【问题讨论】:

  • 您需要在返回的表中查找mmToin,而不是在全局表中。
  • 你能写出这样的sn-p吗?我在返回的表中搜索了DynValue.Table,但长度为0
  • 不幸的是,我真的不知道如何在 C# 中做到这一点,我习惯于使用 C 与 Lua 进行交互。但是 Lua 内部结构应该是一样的,所以 DoFile 应该在堆栈上留下一个表(返回值),其中有一个键 mmToin 和函数的值。
  • “不工作”是什么意思?究竟出了什么问题?
  • 那么异常被触发并带有消息function is not a function and has no __call metamethod。我想是因为找不到函数。

标签: c# lua moonsharp


【解决方案1】:

您需要将 lua 脚本返回值的引用保留为 DynValue 对象,然后在 Table 属性中查找所需的函数。

DynValue dyn = scp.DoFile(GlobalConst.PATH_TO_SCRIPT_FOLDER + "Conversion.lua");

然后你应该可以调用你的函数了

scp.Call(dyn.Table.Get("yourFunctionHere"), parameters).ToObject<double>();

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2021-09-29
    • 2014-09-27
    • 2017-06-26
    • 2017-01-07
    • 2021-06-27
    • 2021-07-15
    • 2020-02-09
    • 2010-12-01
    相关资源
    最近更新 更多