在 Lua 脚本的电子邮件主体中循环。

基本上,我有几个设备需要提取数据。当温度测量低于或超过设定限制时,我会收到多个电子邮件。我希望有一个for循环,将所有当前设备状态(低于或超过限制)包含在一个电子邮件中。

body = for device_name, 1 do
  device_name++ -- 我在这里得到了一个错误,因为出现了意外符号'for'
  "设备名称:" ..device_name.. "\n设备位置:" ..device_location..
  "\n--------------------------------------------------------------" ..
  "\n当前温度:" ..temperature.." 华氏度".. "\n温度限制:("..
  t_under_limit.. "-" ..t_over_limit.. " 华氏度)" .."\n\n当前湿度水平:" ..
  humidity .. "%".. "\n湿度限制:" .. h_under_limit.. "-" ..h_over_limit.. "%)"
  .. "\n\n-------记录时间为:" ..os.date().. "-------"})
end, -- 结束for循环
点赞
用户1208078
用户1208078

lua 中不存在 variable++ 语法。你需要这样做:

variable = variable + 1

另外,你不能将某个 for 循环结构赋值给一个变量。因此,这个语句:

body = for device_name, 1, ...

是无效的。也许你想说的是...

local body = ""
for device_name = 1, 1 do
    device_name = device_name + 1
    body = body.. "my custom message stuff here"
end
2012-10-18 17:44:03
用户1008957
用户1008957

正如之前提到过的,Lua 中没有 ++ 运算符。此外,for 循环的语法与您编写的不同。

我想补充的是,使用 string.format 进行大型字符串拼接会更易读。以下是增强版的代码,采用函数格式,以输入设备参数的表格为参数,每个元素都是一个子表:

local report_model = [[
设备名称: %s
设备位置: %s
--------------------------------------------------------------
当前温度: %d °F
温度限制:(%d-%d °F)
当前湿度水平: %d %%
湿度限制:(%d-%d %%)

-------记录时间: %s-------]]

function temp_report(devices)
  local report = {}
  for i=1,#devices do
    local d = devices[i]
    report[i] = report_model:format(d.name, d.location,
      d.temperature, d.t_under_limit, d.t_over_limit,
      d.humidity, d.h_under_limit, d.h_over_limit,
      os.date())
   end
   return table.concat(report)
end
2012-10-18 19:38:16