我正在用 Lua 编写一个小 CLI 模块以嵌入到 C 程序中。
我想知道处理提示的最佳方法是什么,在tail-call和loop之间进行选择。
作为尾声,我会做这样的事情:
call = { help=function () print 'just ask politely' end }
function shell ()
io.write ('% ')
local cmd = io.read ()
if cmd ~= 'quit' then
call[cmd] () -- for simplicity assume call[cmd] is never nil
return shell ()
end
end
我会问以下问题:
是否正确使用/实现了尾调用消除?是否会
call[cmd] ()
在堆栈中引入任何干扰,以便我不会利用尾调用消除?使用如下循环会更好吗?如果是,为什么?
repeat io.write ('% ') local cmd = io.read() -- do stuff until cmd == 'quit'
在 Lua 编程中说明
tail call是一个装扮成呼叫的 goto。
那么尾调用和循环之间有什么具体区别吗?
谢谢你。