首页 文章

无法在Lua中找出语句逻辑(ESP8266示例)

提问于
浏览
1

我在NodeMU的GitHub页面上遇到的一个程序是 toggle the LED

https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_examples/webap_toggle_pin.lua

为了简化理解代码,我猜测一些变量没有被使用,我可以简单地删除这些行 . 但令我惊讶的是,当我从上传到ESP8266的代码中删除这些行时,我的代码停止了工作 .

有人可以帮助我在下面的代码段中找出以下语句的含义:

local ,method,path,var ...........

据我所知,我们声明了2个匿名变量,然后是另外一个名为method,path和vars的变量,并通过对请求对象执行字符串搜索操作来设置变量值 .

但是因为我们没有使用匿名变量和方法,因为方法是零,因此路径也将评估为零 . 所以我删除了匿名变量,方法和路径变量并上传代码 . 当我尝试浏览ESP提供的页面时,它会抛出错误 .

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

错误是

PANIC:调用Lua API时出现无保护错误(init.lua:27:尝试连接全局'_off'(零值))

帮助我理解程序的完整含义 .

1 回答

  • 1

    _ 不是匿名变量;它是一个常规变量,但有一个约定使用 _ 来表示您在代码中忽略的变量 .

    在这种情况下, string.find 返回第一个匹配的开始和结束位置,然后返回所有捕获(括号中的那些组),因此作者只需要捕获和开始/结束位置 .

    该片段首先检查URL是否为 method URL?parameters 形式,并获取方法,URL和参数 . 第二次检查是针对 method URL (因为第一次模式匹配不匹配) .

    如果存在 vars 值,则将其解析为键/值对作为查询字符串 .

相关问题