为什么Lua REPL需要在输入值时加上等号才能获取值?
2013-12-6 9:17:5
收藏:0
阅读:132
评论:2
我需要帮助关闭这个功能,如果可能的话,从交互模式,否则我会发疯的。REPL坚持在每个表达式之前加上等号,如果您想要值。我发现这非常令人恼火和不直观。更糟糕的是,如果您错误地忘记了等号,它会带您到这个次要提示,只能通过输入一个将导致错误的表达式来退出。
*** 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一样?
如何在不做我所做的那样的情况下退出次要提示?
点赞
用户1009479
自 Lua 5.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
>
2015-11-04 01:04:27
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在独立 Lua中,您输入的所有内容都被视为语句,而不是表达式。这些语句将被评估,并且它们的结果(如果有)将被打印到终端上。这就是为什么您需要在您提供的表达式前面添加
=(实际上是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