Lua传递已知表信息至本地化模块时遇nil索引错误求助
解决Lua中用动态变量访问Config表的nil索引问题
嘿,我明白你现在卡在哪了!你遇到的“attempt to index nil value”错误,核心问题是Lua访问表键的语法用错了——你现在用的Config.modelName并不是在调用你存到modelName变量里的车型名称,而是在找Config表里一个叫"modelName"的固定键(这个键显然不存在,所以返回nil,再去访问它的子键自然就报错了)。
问题根源
Lua里,.语法只能用于静态的键名,比如你说的直接写具体车型名Config.Adder.fInitialDragCoeff,这没问题,因为Adder是固定的键。但当你的键名存在一个变量(比如modelName)里时,必须用方括号[]语法来让Lua解析变量的值作为键。
修改后的代码
把你所有访问Config的行改成方括号形式就行,比如:
for k,v in pairs(FoundObjects)do if v.HashIs == vehhash then print ("Found Model Name: " .. v.ModNam) local modelName = v.ModNam local ped = GetPlayerPed(-1) local vehicle = GetVehiclePedIsIn(ped, false) local vehhash = GetEntityModel(vehicle) local GetHandling = GetVehicleHandlingFloat(vehicle, "CHandlingData", "fInitialDragCoeff") local currentEngineMod = GetVehicleMod(vehicle, 11) -- 这里全部改成方括号语法,用modelName变量的值作为Config的键 originalfInitialDragCoeff = Config[modelName].fInitialDragCoeff originalfDriveBiasFront = Config[modelName].fDriveBiasFront originalfSteeringLock = Config[modelName].fSteeringLock originalfTractionCurveMax = Config[modelName].fTractionCurveMax originalfTractionCurveMin = Config[modelName].fTractionCurveMin originalfTractionCurveLateral = Config[modelName].fTractionCurveLateral originalfLowSpeedTractionLossMult = Config[modelName].fLowSpeedTractionLossMult print(modelName) print(originalfInitialDragCoeff) -- 现在应该能正常输出值了! end end
补充说明
举个简单例子:如果modelName的值是"Adder",那么Config[modelName]就等价于Config.Adder——这正是你手动写具体车型名时的效果。而Config.modelName等价于Config["modelName"],这显然不是你要的,因为你的Config表里没有叫modelName的键。
这样改完后,应该就能自动根据当前车辆的modelName从Config里取对应的值啦!
内容的提问来源于stack exchange,提问作者Radek
相关产品推荐
相关产品推荐

