这个LUA代码的意思是什么? ""%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })"。

我有一个关于以下代码片段的问题

ch = s:taboption("general", Value, "channel", translate("Channel"))
ch:value("auto", translate("auto"))
for _, f in ipairs(iw and iw.freqlist or { }) do
    if not f.restricted then
       ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })
    end
end

这行代码是做什么的?

ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })

我认为它是为 ch 赋值,但我无法理解它到底给 ch 赋了哪个值,因为我无法完全理解这部分的意思:_"%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 }_

提前感谢!

完整的代码:

-- 检查是否在同一台无线电上存在客户端接口,如果是,则将频道选择锁定为所选择的站点
local has_sta = nil
local _, net
for _, net in ipairs(wdev:get_wifinets()) do
    if net:mode() == "sta" and net:id() ~= wnet:id() then
        has_sta = net
        break
    end
end

if has_sta then
    ch = s:taboption("general", DummyValue, "choice", translate("Channel"))
    ch.value = translatef("Locked to channel %d used by %s",
        has_sta:channel(), has_sta:shortname())
else
    ch = s:taboption("general", Value, "channel", translate("Channel"))
    ch:value("auto", translate("auto"))
    -- for _, f in ipairs(iw and iw.freqlist or { }) do
    for _.iw.chanlist, f in ipairs(iw and iw.freqlist or iw.channels) do
        if not f.restricted then
            ch:value(f.channel, "%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 })
        end
    end
end
点赞
用户1190388
用户1190388

"%i (%.3f GHz)" %{ f.channel, f.mhz / 1000 }

  1. %i 将参数解析为整数。

  2. %.3f 格式化第二个参数为保留三位小数的浮点数。

  3. %{} 定义传递给前面字符串格式化的参数。

    • 第一个参数是 f.channel
    • 第二个参数是 f.mhz/1000

ch:value( f.value, ... )

与以下相同:

ch.value( ch, f.value, ... )
2013-04-05 14:31:15
用户1847592
用户1847592

看起来 % 运算符通过字符串元表的 __mod 元方法定义了字符串的操作。

getmetatable('').__mod = function(str, tbl)
   return str:format((table.unpack or unpack)(tbl))
end
2013-04-05 15:19:28