pairs 函数的第一个参数应该是表,但得到了 nil

好的,我正在试图修复这个错误,但是我完全陷入了困境, 如果有人有任何想法,欢迎与我分享你的看法,

function VehicleList(isDown)
    ped = GetPlayerPed(-1);
    MenuTitle = "车辆:"
    local grade = RSCore.Functions.GetPlayerData().job.grade
    ClearMenu()
    for veh, label in pairs(Config.Vehicles) do
        Menu.addButton(label, "TakeOutVehicle", veh, "车库", "发动机:100%", "车身:100%", "燃料:100%")
    end

    if IsArmoryWhitelist() then
        for veh, label in pairs(Config.WhitelistedVehicles) do
            Menu.addButton(label, "TakeOutVehicle", veh, "车库", "发动机:100%", "车身:100%", "燃料:100%")
        end
    end

    Menu.addButton("返回", "MenuGarage",nil)
end
点赞
用户12648621
用户12648621

你的表实际上返回了一个 nil 值,因此 pairs 函数无法工作。你可以通过创建条件来解决这个问题,像这样:

if (table ~= nil) then -- condition
    for ... in pairs(table) do

    end
end
2021-03-10 21:57:27
用户15371518
用户15371518
所以基本上它应该像这样工作,

function VehicleList(isDown) ped = GetPlayerPed(-1); MenuTitle = "Voertuigen:" local grade = RSCore.Functions.GetPlayerData().job.grade ClearMenu() for k, v in pairs(Config.Vehicles[grade]) do Menu.addButton(v, "TakeOutVehicle", k, "Garage", " Motor: 100%", " Body: 100%", " Fuel: 100%") end

```

但是,如果在 for k, v in pairs(Config.Vehicles[grade]) do 的行中删除 [grade] 部分,我可以在游戏内打开车辆列表,但根本无法生成它们。 正是 [grade] 部分给我带来了不良的参数 #1。

2021-03-10 22:17:28
用户2858170
用户2858170

pairs 仅适用于表值。因此,使用空值调用它会导致错误。

基本上有三件事情你可以做。

  1. 找出为什么你得到一个空值而不是一个表格,并修复它
  2. 通过在条件语句中放置通用的 for 循环来避免调用 pairs
  3. 用默认表格(例如,一个空表格)替换 pairs 参数

2:

if type(Config.Vehicles) == "table" then
  for veh, label in pairs(Config.Vehicles) do
    Menu.addButton(label, "TakeOutVehicle", veh, "Garage",
      " Motor: 100%", " Body: 100%", " Fuel: 100%")
  end
end

3: 仅在表格为表格或空/假时有效

for veh, label in pairs(Config.Vehicles or {}) do
  Menu.addButton(label, "TakeOutVehicle", veh, "Garage",
    " Motor: 100%", " Body: 100%", " Fuel: 100%")
end
2021-03-11 06:26:02