错误“‘OutputLogMessage’的错误参数(预期数字,为零)”是什么意思?

问题描述 投票:0回答:1

我收到一条错误消息:

[string "LuaVM"]:163: bad argument #3 to 'OutputLogMessage' (number expected, got nil) Line Number:1
LOADED
[string "LuaVM"]:163: bad argument #3 to 'OutputLogMessage' (number expected, got nil) Line Number:1

该错误意味着什么以及我需要修复什么?

function mode_change(event, arg)
    ---one_ NO RECOIL
    if (event == "G_PRESSED" and arg == 1) then
    one_    = not one_
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 2) then
    two_    = not two_
    one_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 3) then
    three_  = not three_
    one_    = false
    two_    = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 4) then
    four_   = not four_
    one_    = false
    two_    = false
    three_  = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 5) then
    five_   = not five_
    one_    = false
    two_    = false
    three_  = false
    four_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 6) then
    six_    = not six_
    one_    = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 7) then
    seven_  = not seven_
     one_   = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 8) then
    eight_  = not eight_
     one_   = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 9) then
    nine_   = not nine_
    one_    = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    ten_    = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 10) then
    ten_    = not ten_
     one_   = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    eleven_ = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 11) then
    eleven_ = not eleven_
     one_   = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    twelve_ = false
    elseif (event == "G_PRESSED" and arg == 12) then
    twelve_ = not twelve_
     one_   = false
    two_    = false
    three_  = false
    four_   = false
    five_   = false
    six_    = false
    seven_  = false
    eight_  = false
    nine_   = false
    ten_    = false
    eleven_ = false
    end
end
 
function OnEvent(event, arg)
    OutputLogMessage("event = %s, arg = %d\n", event, arg)
    if (event == "PROFILE_ACTIVATED") then
            EnablePrimaryMouseButtonEvents(true)
    elseif event == "PROFILE_DEACTIVATED" then
            ReleaseMouseButton(2)
 
    end
    mode_change(event, arg)
    ---For Setting F1~F12 Key
    ---NO RECOIL SETTINGS (You can edit Sleep time and X,Y of NO RECOIL)
 
    ---one_ SETTINGS
    if event == "MOUSE_BUTTON_PRESSED" and arg == 1 and one_ and IsMouseButtonPressed(3) then
    if one_ then
    repeat
    MoveMouseRelative(0, 8)
    Sleep(10)
    until not IsMouseButtonPressed(1)
    end
 
    ---two_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and two_ and IsMouseButtonPressed(3) then
    if two_ then
    repeat
    MoveMouseRelative(0, 5)
    Sleep(10)
    until not IsMouseButtonPressed(1)
    end
 
    ---three_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and three_ and IsMouseButtonPressed(3) then
    if three_ then
    repeat
    MoveMouseRelative(0, 7)
    Sleep(9)
    until not IsMouseButtonPressed(1)
    end
 
    ---four_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and four_ and IsMouseButtonPressed(3) then
    if four_ then
    repeat
    MoveMouseRelative(0, 5)
    Sleep(8)
    until not IsMouseButtonPressed(1)
    end
 
    ---five_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and five_ and IsMouseButtonPressed(3) then
    if five_ then
    repeat
    MoveMouseRelative(1, 10)
    Sleep(7)
    MoveMouseRelative(-1, 1)
    Sleep(8)
    until not IsMouseButtonPressed(1)
    end
 
    ---six_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and six_ and IsMouseButtonPressed(3) then
    if six_ then
    repeat
    MoveMouseRelative(1, 10)
    Sleep(9)
    MoveMouseRelative(-1, 1)
    Sleep(8)
    until not IsMouseButtonPressed(1)
    end
 
    ---seven_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and seven_ and IsMouseButtonPressed(3) then
    if seven_ then
    repeat
    MoveMouseRelative(1, 10)
    Sleep(10)
    MoveMouseRelative(-1, 0)
    Sleep(8)
    until not IsMouseButtonPressed(1)
    end
 
    ---eight_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and eight_ and IsMouseButtonPressed(3) then
    if eight_ then
    repeat
    MoveMouseRelative(0, 6)
    Sleep(15)
    until not IsMouseButtonPressed(1)
    end
 
    ---nine_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and nine_ and IsMouseButtonPressed(3) then
    if nine_ then
    repeat
            PressKey("P")
            MoveMouseRelative(0,9)
            Sleep(30)
            ReleaseKey("P")    
            Sleep(50)
         until not IsMouseButtonPressed(1)
      end
 
    ---ten_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and ten_ and IsMouseButtonPressed(3) then
    if ten_ then
    repeat
    MoveMouseRelative(0, 6)
    Sleep(9)
    until not IsMouseButtonPressed(1)
    end
 
    ---eleven_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and eleven_ and IsMouseButtonPressed(3) then
    if eleven_ then
    repeat
    MoveMouseRelative(0, 6)
    Sleep(11)
    until not IsMouseButtonPressed(1)
    end
 
    ---twelve_ SETTINGS
    elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and twelve_ and IsMouseButtonPressed(3) then
    return
    end
end
lua lazy-evaluation logitech-gaming-software
1个回答
0
投票

printf 风格

OutputLogMessage
要求与
%d
格式说明符(和其他数字说明符)关联的参数是数字类型(或可强制为数字类型 - 即,产生非 nil 值来自
tonumber
)。

该函数直接镜像

string.format
函数,可以方便测试:

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> string.format('%d', 42)
42
> string.format('%d', '42')
42
> string.format('%d', nil)
stdin:1: bad argument #2 to 'format' (number expected, got nil)
stack traceback:
    [C]: in function 'string.format'
    stdin:1: in main chunk
    [C]: in ?
> string.format('%d')
stdin:1: bad argument #2 to 'format' (no value)
stack traceback:
    [C]: in function 'string.format'
    stdin:1: in main chunk
    [C]: in ?

"PROFILE_ACTIVATED"
"PROFILE_DEACTIVATED"
期间,
OnEvent
被传递一个 nil 值作为其第二个参数,并且您无条件地将其作为与
%d
关联的参数传递。

您可以通过多种方式防范这种情况,包括

-- check that arg is truthy, choosing to display nothing if it is falsy (nil)
if arg then
    OutputLogMessage("event = %s, arg = %d\n", event, arg)
end

-- display a truthy arg, or a sentinel value otherwise
OutputLogMessage("event = %s, arg = %d\n", event, arg or -1)
© www.soinside.com 2019 - 2024. All rights reserved.