简体   繁体   English

尝试将数字与 nil 进行比较

[英]attempt to compare a number with nil

I'm having issues with the below error:我遇到以下错误的问题:

esx_glovebox_sv.lua:138: attempt to compare number with nil. esx_glovebox_sv.lua:138:尝试将数字与 nil 进行比较。

Line 138 is third in RAW data below第 138 行是下面 RAW 数据中的第三行

RegisterServerEvent("esx_glovebox:getItem")
AddEventHandler(
  "esx_glovebox:getItem",
  function(plate, type, item, count, max, owned)
    local _source = source
    local xPlayer = ESX.GetPlayerFromId(_source)

    if type == "item_standard" then
      local targetItem = xPlayer.getInventoryItem(item)
      if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then
        TriggerEvent(
          "esx_glovebox:getSharedDataStore",
          plate,
          function(store)
            local coffres = (store.get("coffres") or {})
            for i = 1, #coffres, 1 do
              if coffres[i].name == item then
                if (coffres[i].count >= count and count > 0) then
                  xPlayer.addInventoryItem(item, count)
                  if (coffres[i].count - count) == 0 then
                    table.remove(coffres, i)
                  else
                    coffres[i].count = coffres[i].count - count
                  end

                  break
                else
                  TriggerClientEvent(
                    "pNotify:SendNotification",
                    _source,
                    {
                      text = _U("invalid_quantity"),
                      type = "error",
                      queue = "glovebox",
                      timeout = 3000,
                      layout = "bottomCenter"
                    }
                  )
                end

If I understand your post correctly "line 138" points to the third line in your posted code snippet, which would be:如果我正确理解您的帖子,“第 138 行”指向您发布的代码片段中的第三行,即:

if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then

The error means, that one of the values you are working with is nil and therefore can't be compared to a number.错误意味着,您正在使用的值之一nil ,因此无法与数字进行比较。 In your case this can only be targetItem.limit .在您的情况下,这只能是targetItem.limit

If each targetItem should have a limit and count value, the issue is somewhere else in your code.如果每个targetItem都应该有一个limitcount数值,那么问题就出在代码的其他地方。

Instead of throwing an error you can simply check for the existance of the value by adding additional checks:您可以通过添加额外的检查来简单地检查值的存在,而不是抛出错误:

if type == "item_standard" then
  local targetItem = xPlayer.getInventoryItem(item)

  -- Make sure that targetItem and targetItem.limit aren't nil.
  if targetItem and targetItem.limit then
    if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then

Short explanation: In Lua both nil and the boolean value false represent a false value inside of a logical expression.简短说明:在 Lua 中nil和布尔值false表示逻辑表达式中的false值。 Any other value will be treated as true .任何其他值都将被视为true In this case you'll skip the nested if-statement if either targetItem or targetItem.limit are nil .在这种情况下,如果targetItemtargetItem.limitnil您将跳过嵌套的 if 语句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM