Lua REPL自动消除表达式和语句的歧义?

正如众所周知,Lua 5.3处理交互式REPL以此区分表达式和语句:

在交互模式下,Lua重复提示并等待一行。读取一行后,Lua首先尝试将该行解释为表达式。如果成功,它会打印它的值。否则,它将该行解释为语句。如果您编写了不完整的语句,则解释器通过发出不同的提示等待其完成。

然而,这不是我想要的行为。例如,我有一些代码"f()"要评估,其中f将通过错误,不管发生什么。它还会改变lua的内部状态。以上方法会导致错误,因为它会两次更改内部状态。

因此,我想知道,是否有一种实现自动消除表达式和语句歧义的REPL的方法?我必须添加一些语法分析来实现这一点吗?

原文链接 https://stackoverflow.com/questions/70555201

点赞
stackoverflow用户4433969
stackoverflow用户4433969

在 Lua REPL 中解释代码是一个两步骤的过程。首先,你需要使用 loadstring 或类似的函数将输入转换为可运行的代码。这段代码已经被验证是正确的但尚未运行。然后,你需要显式地调用它。

fn = loadstring("return 42");
fn()

总之,使用 loadstring() 或类似的函数解析和验证代码是无副作用的,只要你不调用结果即可。

2022-01-02 11:30:20