【问题标题】:Lua Returns the result of executing as stringLua 以字符串形式返回执行结果
【发布时间】:2019-01-07 03:42:21
【问题描述】:

我在另一种编程语言(Vala)中使用 luaVM,并希望将代码从 vala 传递给 lua,以便 lua 将执行此代码的结果作为字符串返回。

> s2="print (5+5)"
> s2
print (5+5)
> loadstring(s2)
function: 0x55834153f080
> func = loadstring(s2)
> func()
10

尝试了很多东西,但我没有成功,也就是说,我需要一个包含 10 的字符串类型的变量而不是 10。所以我可以做 Vala 的 vm.to_string(-1) 并获得“10 "

【问题讨论】:

  • 试试return tostring(5+5)
  • 记住你也可以用local str = loadstring(s2)()一行调用代码。

标签: lua executable vala


【解决方案1】:

正如 Egor 所说,您可以在使用 tostring 将结果返回之前将其转换为字符串。

我还要补充一点,您可能想使用dostring 而不是loadstring。

lua 中的load 函数意味着编译并且不运行块,而是在调用时返回一个函数将运行块。(loadfile,loadstring)

do 函数将编译并运行内容。(dofile, dostring)

详情请见:Lua: 8 – Compilation, Execution, and Errors

和 dofile 一样,loadfile 也从一个文件中加载一个 Lua 块,但它不运行这个块。相反,它只编译块并将编译后的块作为函数返回。

此部分更直接地与loadfile 对话,但页面涵盖loadstring。


如果没有定义dostring,它可以是这样的:

function dostring(s)
    return assert(loadstring(s))()
end

如果您稍后使用 lua 版本,则 5.1 loadstring 变为 load

【讨论】:

  • 我想我需要分享代码以便更好地理解。该界面由2个TextView组成。在这个想法上,您在右侧编写 lua 代码并在左侧查看结果。但是现在执行结果显示在控制台中,并且仅在右侧: [string "print (5..."]:2: ')' expected (to close '(' at line 1) near pastebin.com/uhQhR0vT
  • 现在似乎 vm 中字符串的最后一个元素是它的错误,当字符串尚未输入到末尾时。并且正确的执行结果会到达控制台。我认为之所以如此,是因为在左侧不可能看到与输入 print(5) 相关的错误,(因为它不是错误)。有 "[string " print (5..."]: 2:') ' 预期(关闭 '(' 在第 1 行" 或 "[string "print (5))..."]: 2:' ) '')'附近出现意外符号""
  • 第 49 行 return tostring dostring("..inputCode..") 应该类似于 return tostring(dostring("..inputCode..") or 'nil')。你在tostring 函数中缺少() dostring
  • dostring("..inputCode..") or 'nil' 或 nil 如果 inputCode 不返回值,则将默认值返回给 tostring 函数。这将防止发生这种情况时出现错误。该值可以是任何它不需要是nil 它可以是0 如果这样更好
  • 一切都还是一样,录制了一段简短的截屏视频。 youtu.be/2SvNORmAu7A
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多