Can';t在Lua中表示语句逻辑(ESP8266示例)
我在GitHub页面上遇到的一个程序是:NodeMCU切换LED: 为了简化代码以便于理解,我猜测一些变量没有被使用,我可以简单地删除这些行。但令我大吃一惊的是,当我从上传到ESP8266的代码中删除这些行时,我的代码停止了工作 有人能帮我弄清楚下面这段话的意思吗 局部变量,方法,路径,变量 据我所知,我们声明了2个匿名变量,然后是另一个名为method、path和vars的变量,并通过对请求对象执行字符串搜索操作来设置vars的值 但由于我们没有使用匿名变量和方法,它将是nil,因此path也将计算为nil,因为method是nil。所以我删除了匿名变量、方法变量和路径变量,并上传了代码。当我试图浏览ESP提供的页面时,它抛出错误Can';t在Lua中表示语句逻辑(ESP8266示例),lua,esp8266,Lua,Esp8266,我在GitHub页面上遇到的一个程序是:NodeMCU切换LED: 为了简化代码以便于理解,我猜测一些变量没有被使用,我可以简单地删除这些行。但令我大吃一惊的是,当我从上传到ESP8266的代码中删除这些行时,我的代码停止了工作 有人能帮我弄清楚下面这段话的意思吗 局部变量,方法,路径,变量 据我所知,我们声明了2个匿名变量,然后是另一个名为method、path和vars的变量,并通过对请求对象执行字符串搜索操作来设置vars的值 但由于我们没有使用匿名变量和方法,它将是nil,因此path
local buf = "";
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
_GET[k] = v
end
end
错误是
恐慌:调用LuaAPI时发生未受保护的错误(init.Lua:27:尝试连接全局'\u off'(一个nil值))
帮助我理解程序的完整含义。
\u
不是匿名变量;它是一个常规变量,但有一个惯例,即使用\uuu
来指示代码中忽略的变量
在本例中,string.find
返回第一次匹配的开始和结束位置,然后返回所有捕获(括号中的组),因此作者只需要捕获和开始/结束位置
片段首先检查URL的形式是否为methodURL?parameters
,并获取方法、URL和参数。第二个检查是针对方法URL
(因为它不会与第一个模式匹配匹配)
如果
vars
值存在,它将被解析为键/值对作为查询字符串。因为我的默认url格式(在测试代码中)是192.168.1.2/?pin=OFF或192.168.1.2/?pin=ON,我相信不会使用方法和路径变量。因此,我将它们从代码中删除并上传到ESP。当我尝试访问该页面时,它不起作用,我无法打开或关闭PIN。那么是否需要方法和路径变量(即使我没有对它们进行评估)?您是否更新了模式?如果不打算捕获第一组和第二组,则需要删除它们周围的括号:local\uu,u,vars=string.find(请求,“[A-Z]+.+?(.+)HTTP”)
。谢谢。我现在按原样使用代码,但您的解释确实帮助我理解了模式。很好。如果答案对你的问题有帮助,你可能会想接受。