为什么Lua REPL要求您在前面加一个等号以获得一个值?
我需要帮助关闭这个功能,如果可能的话,从互动模式,否则我会发疯。如果需要该值,REPL将坚持在每个表达式之前使用等号。我觉得这很烦人,也不直观。更糟糕的是,如果您错误地忘记了等号,它会将您带到这个第二个提示,该提示只能通过 键入将导致错误的表达式为什么Lua REPL要求您在前面加一个等号以获得一个值?,lua,read-eval-print-loop,Lua,Read Eval Print Loop,我需要帮助关闭这个功能,如果可能的话,从互动模式,否则我会发疯。如果需要该值,REPL将坚持在每个表达式之前使用等号。我觉得这很烦人,也不直观。更糟糕的是,如果您错误地忘记了等号,它会将您带到这个第二个提示,该提示只能通过 键入将导致错误的表达式 *** str="This is some string" *** str >> >> >> = >> >> =str stdin:6: unexpected symbol near '='
*** str="This is some string"
*** str
>>
>>
>> =
>>
>> =str
stdin:6: unexpected symbol near '='
*** =str
This is some string
*** #str
stdin:1: unexpected symbol near '#'
*** =#str
19
***
*** 545+8
stdin:1: unexpected symbol near '545'
*** =545+8
553
***
我需要一堂使用REPL的课:有没有办法去掉等号,使它的行为与其他REPL相同?
如何在不执行我所做的操作的情况下退出辅助提示?您输入的所有内容都被视为语句,而不是表达式。对语句进行评估,并将其结果(如果有)打印到终端。这就是为什么您需要将
=
(实际上是return
的缩写)预先添加到您作为示例给出的表达式中,以使它们正确显示而不会出错
您看到的“次要提示”是输入不完整语句时发生的情况
在交互模式下,如果您编写了一个不完整的语句,解释器将通过发出不同的提示来等待其完成
您可以通过完成语句来退出它
然而,制作自己的REPL并不是很难,它满足您的需求。当然,您失去了以这种方式从不完整的块逐步构建语句的能力,但您可能不需要这样做
local function print_results(...)
-- This function takes care of nils at the end of results and such.
if select('#', ...) > 1 then
print(select(2, ...))
end
end
repeat -- REPL
io.write'> '
io.stdout:flush()
local s = io.read()
if s == 'exit' then break end
local f, err = load(s, 'stdin')
if err then -- Maybe it's an expression.
-- This is a bad hack, but it might work well enough.
f = load('return (' .. s .. ')', 'stdin')
end
if f then
print_results(pcall(f))
else
print(err)
end
until false
由于Lua5.3,您不需要
=
,因为Lua现在首先尝试将其解释为一个表达式
发件人:
在交互模式下,Lua反复提示并等待一行。在读了一行之后,Lua首先尝试将该行解释为一个表达式。如果成功,则打印其值。否则,它将该行解释为语句。如果您编写了一个不完整的语句,那么解释器将通过发出不同的提示来等待其完成
一个小测试:
Lua 5.3.0 Copyright (C) 1994-2014 Lua.org, PUC-Rio
> str = 'hello' .. ' Lua'
> str
hello Lua
> 1 + 2
3
>
你的意思是想在输入的所有内容前加上
return
?不确定return
是如何输入的,但我不想每次想查看值时都按=
。它有点超出了repl的目的。开头的=
是独立Lua中返回的缩写
可能足以退出辅助提示。545+8
不是Lua语句,因此无法返回任何内容。Lua REPL已经打印了语句返回的任何值,但它不能像前面解释的那样用作计算器。我得到了错误的参数#1到'load'(预期函数,得到字符串)
。当您使用loadstring
,loadstring(“print(“..s..”)”)(
)时,它可以工作,但不幸的是,它只能用作计算器。@在Lua 5.2中,使用load
;在Lua5.1中,使用loadstring
。您可能正在使用Lua 5.1它现在可以工作了。非常好。我想我可以这样做。我会反转语句/表达式尝试,这样f()
将打印结果(假设函数返回一个值)。