Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Lua中表示语句逻辑(ESP8266示例)_Lua_Esp8266 - Fatal编程技术网

Can';t在Lua中表示语句逻辑(ESP8266示例)

Can';t在Lua中表示语句逻辑(ESP8266示例),lua,esp8266,Lua,Esp8266,我在GitHub页面上遇到的一个程序是:NodeMCU切换LED: 为了简化代码以便于理解,我猜测一些变量没有被使用,我可以简单地删除这些行。但令我大吃一惊的是,当我从上传到ESP8266的代码中删除这些行时,我的代码停止了工作 有人能帮我弄清楚下面这段话的意思吗 局部变量,方法,路径,变量 据我所知,我们声明了2个匿名变量,然后是另一个名为method、path和vars的变量,并通过对请求对象执行字符串搜索操作来设置vars的值 但由于我们没有使用匿名变量和方法,它将是nil,因此path

我在GitHub页面上遇到的一个程序是:NodeMCU切换LED

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

有人能帮我弄清楚下面这段话的意思吗

局部变量,方法,路径,变量

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

但由于我们没有使用匿名变量和方法,它将是nil,因此path也将计算为nil,因为method是nil。所以我删除了匿名变量、方法变量和路径变量,并上传了代码。当我试图浏览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
错误是

恐慌:调用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”)
。谢谢。我现在按原样使用代码,但您的解释确实帮助我理解了模式。很好。如果答案对你的问题有帮助,你可能会想接受。