无法理解 Lua 中的语句逻辑(ESP8266 示例)
Can't figure the statement logic in Lua (ESP8266 sample)
我在 GitHub 页面上遇到的一个用于 NodeMCU 切换 LED 的程序是:
https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_examples/webap_toggle_pin.lua
为了简化代码以便于理解,我猜有些变量没有被使用,我可以简单地删除这些行。但令我非常惊讶的是,当我从上传到 ESP8266 的代码中删除这些行时,我的代码停止工作了。
谁能帮我弄清楚下面代码段中以下语句的含义:
本地_、_、方法、路径、变量......
据我了解,我们声明了 2 个匿名变量,然后是名为 method、path 和 vars 的附加变量,并通过对请求对象执行字符串搜索操作来设置 vars 的值。
但由于我们没有使用匿名变量和方法,它们将为 nil,因此路径也将评估为 nil,因为方法为 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
错误是
PANIC:调用 Lua 时发生未受保护的错误 API(init.lua:27:尝试连接全局“_off”(零值))
帮我理解程序的完整含义。
_
不是匿名变量;它是一个常规变量,但有一个约定,使用 _
来指示您在代码中忽略的变量。
在这种情况下,string.find
returns 第一个匹配的开始和结束位置,然后是所有捕获(括号中的那些组),因此作者只需要捕获和 start/end个职位。
该片段首先检查 URL 是否为 method URL?parameters
形式并获取方法、URL 和参数。第二个检查是 method URL
(因为它不会被第一个模式匹配匹配)。
如果存在 vars
值,它将被解析为 key/value 对作为查询字符串。
我在 GitHub 页面上遇到的一个用于 NodeMCU 切换 LED 的程序是:
https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_examples/webap_toggle_pin.lua
为了简化代码以便于理解,我猜有些变量没有被使用,我可以简单地删除这些行。但令我非常惊讶的是,当我从上传到 ESP8266 的代码中删除这些行时,我的代码停止工作了。
谁能帮我弄清楚下面代码段中以下语句的含义:
本地_、_、方法、路径、变量......
据我了解,我们声明了 2 个匿名变量,然后是名为 method、path 和 vars 的附加变量,并通过对请求对象执行字符串搜索操作来设置 vars 的值。
但由于我们没有使用匿名变量和方法,它们将为 nil,因此路径也将评估为 nil,因为方法为 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
错误是
PANIC:调用 Lua 时发生未受保护的错误 API(init.lua:27:尝试连接全局“_off”(零值))
帮我理解程序的完整含义。
_
不是匿名变量;它是一个常规变量,但有一个约定,使用 _
来指示您在代码中忽略的变量。
在这种情况下,string.find
returns 第一个匹配的开始和结束位置,然后是所有捕获(括号中的那些组),因此作者只需要捕获和 start/end个职位。
该片段首先检查 URL 是否为 method URL?parameters
形式并获取方法、URL 和参数。第二个检查是 method URL
(因为它不会被第一个模式匹配匹配)。
如果存在 vars
值,它将被解析为 key/value 对作为查询字符串。