Use table.pack when nil values must still count as arguments.

nil aware count `table.pack(...).n` keeps the original argument count even when one argument is `nil`.

Pack Count

middle
pack_count.lua
Replay: real traced execution (multi-file project)
local middle = "green"
local count = table.pack("red", middle, nil).n
print("middle=" .. tostring(middle))
print("count=" .. count)
local middle = "yellow"
local count = table.pack("red", middle, nil).n
print("middle=" .. tostring(middle))
print("count=" .. count)
local middle = nil
local count = table.pack("red", middle, nil).n
print("middle=" .. tostring(middle))
print("count=" .. count)
  1. middle ← green, count ← 3

    1local middle→ green = "green" --@middle="yellow", nil2local count→ 3 = table.pack("red", middlegreen, nil).n3print("middle=" .. tostring(middlegreen))4print("count=" .. count3)
    outputmiddle=green
    count=3
  1. middle ← yellow, count ← 3

    1local middle→ yellow = "yellow"2local count→ 3 = table.pack("red", middleyellow, nil).n3print("middle=" .. tostring(middleyellow))4print("count=" .. count3)
    outputmiddle=yellow
    count=3
  1. middle ← nil, count ← 3

    1local middle→ nil = nil2local count→ 3 = table.pack("red", middlenil, nil).n3print("middle=" .. tostring(middlenil))4print("count=" .. count3)
    outputmiddle=nil
    count=3