首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lua corona运行时错误:试图在字段'?‘上执行算术( nil值)

lua corona运行时错误:试图在字段'?‘上执行算术( nil值)

这个错误是Lua语言中的一个运行时错误,它表示在尝试执行算术操作时,发现了一个空值(nil)。具体来说,它是在尝试在一个名为'?'的字段上执行算术操作时发生的。

在Lua语言中,'?'通常用作一个占位符,表示一个未知的字段或变量。当尝试在一个空值上执行算术操作时,就会出现这个错误。

要解决这个错误,需要检查代码中涉及到该字段的地方,确保在执行算术操作之前,该字段已经被正确地赋值。可以通过添加条件判断语句来避免在空值上执行算术操作,或者在使用该字段之前先进行空值检查。

对于Corona SDK开发中的Lua语言,可以参考以下步骤来解决这个错误:

  1. 确定错误发生的位置:查找代码中涉及到'?'字段的地方,特别是与算术操作相关的地方。
  2. 检查该字段的赋值:确保在使用该字段之前,它已经被正确地赋值。可以使用条件判断语句,如if语句,来检查该字段是否为空值。
  3. 添加空值检查:在使用该字段之前,可以使用条件判断语句来检查该字段是否为空值。例如,可以使用if语句来检查该字段是否为nil,如果是则进行相应的处理,避免执行算术操作。
  4. 调试和测试:在修改代码后,进行调试和测试,确保该错误不再出现,并且代码能够正常执行。

总结起来,这个错误是由于在Lua语言中尝试在一个空值字段上执行算术操作而引起的。要解决这个错误,需要检查代码中涉及到该字段的地方,确保在使用该字段之前,它已经被正确地赋值,并且可以添加空值检查来避免在空值上执行算术操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Lua的元表和元方法

Lua语言试图将两个表相加时,它会先检查两者之一是否有元表且该元表中是否有__add字段。如果Lua语言找到了该字段,就调用该字段对应的,即所谓的元方法,本例中就是用于计算表的和的函数。...如果我们执行了 s = s + 8,那么 Set.union 内部就会发生错误: bad argument #1 to 'pairs' (table expected , got number) 如果想要得到更明确的错误信息...表相关的元方法 算术运算符、位运算符和关系运算符的元方法都定义了各种错误情况的行为,但它们都没有改变语言的正常行为。...Lua语言还提供了一种改变表两种正常情况下的行为的方式,即访问和修改表中不存在的字段。 __index元方法 正如我们此前所看到的,当访问一个表中不存在的字段时会得到nil。...组合使用元方法index和__newindex可以实现Lua语言中的一些强大的结构,例如只读的表、具有默认的表和面向对象编程中的继承。 具有默认的表 一个普通表中所有字段的默认都是nil

63540

Lua连续教程之Lua反射

Lua语言这样的动态语言支持几种反射机制:环境允许运行时观察全局变量; 诸如type和pairs这样的函数允许运行时检查和遍历未知数据结构;诸如load和require这样的函数允许程序自身中追加代码或更新代码...short_src: 该字段是source的精简版本,对于错误信息十分有用。 linedefined: 该字段是该函数定义源代码中第一行的行号。...nups: 该字段是该函数的的个数。 nparams: 该字段是该函数的参数个数。 isvararg: 该字段表明该函数是否为可变长参数函数。...字段name有些特殊。请注意,由于函数Lua语言中是第一类,因此函数既可以没有名称也可以有多个名称。Lua语言会通过检查调用该函数的代码来看函数是如何被调用的,进而尝试找到该函数的名称。...一个不使用全局变量的函数可能没有_ENV。在这种情况下,如果我们试图把_ENV当做全局变量来查询,那么由于我们需要_ENV来得到其自身的,所以可能会陷入无限递归循环。

2.6K10

Lua中的环境(Environment)

例如,我们需要操作一个全局变量,而这个全局变量的名称却存储另一个变量中或者经由运行时计算得到。...如果要测试一个变量是否存在,并不能简单地将它与nil比较。因为如果它为nil,那么访问就回引发一个错误。...第一种方法中,普通操作期间元方法不会被调用。第二种方法中,元方法只有当程序访问一个nil的变量时才会被调用。 非全局环境 Lua语言中,全局变量并一定非得是真正全局的。...local z = 10 _ENV.x = _ENV.y + z end 也就是说,Lua语言是一个名为_ENV的预定义(一个外部的局部变量,upvalue)存在的情况下编译所有的代码段的。...为了避免错误地创建全局变量,笔者使用把nil赋给_ENV的方式。把_ENV设为nil后,任何对全局变量的复制都会抛出异常。这种方式的另一个好处是无须修改代码也可以老版本的Lua语言中运行。

1.1K20

Lua学习笔记

相比于dofile,loadfile只是从指定的文件中加载Lua代码块,然后编译这段代码块,如果有编译错误,就返回nil,同时给出错误信息,但是在编译成功后并不真正的执行这段代码块。...Lua提供了错误处理函数pcall,该函数的第一个参数为需要“保护执行”的函数,如果该函数执行失败,pcall将返回false及错误信息,否则返回true和函数调用的返回。...Account.deposite方法中,由于self(a对象)并没有balance 字段,因此执行self.balance + v时,也需要重定向访问Account中的balance字段,其缺省为...变量栈中的索引,最后一个参数是table的键值,该函数执行成功后会将字段压入栈中。...lua_pushnumber(L,[number])压入到栈中的,该函数执行成功后会将刚刚压入的字段弹出栈。

3.1K60

Lua 语法基础 | Nmap 脚本

os.exit() 终止程序运行 os.getenv("HOME") --> /home/lua 获取环境变量的,如果未定义,返回nil os.execute 用于执行系统命令,返回为命令执行结束后的状态...这个表可能具有以下字段 : source : 说明函数定义的位置,如果定义字符串中(调用load),那么字段为这个字符串,如果被定义文件中,那么就是这个函数所在的文件名 short_src :...该字段是source 的精简版本(最多60个字符),对于错误信息十分有用 linedefined : 函数定义源代码中的第一行的行号 lastlinedefined : 该字段是该函数定义源代码中最后一行的行号...: 该字段用于说明上一个字段的含义,可能是 global , local , method, field 或 空字符串 ,空字符串表示 Lua 语言找不到该函数的名称 nups : 该字段是该函数的的个数...这个函数有两个返回,变量名和变量的当前 如果 变量索引大于活跃变量的数量,函数返回 nil ,如果栈层次无效,则会抛出异常 Lua 语言按局部变量函数中出现的顺序对它们进行编号,但编号只限于函数当前的作用域中活跃的变量

2K50

lua语言:类型,基本语法,函数

但要注意 Lua 中所有的都可以作为条件。控制结构的条 件中除了 false 和 nil 为假,其他都为真。所以 Lua 认为 0 和空串都是真。...可以使用单引号或者双引号表示字符串 a = “a line” b = ‘another line’ 运行时Lua 会自动 string 和 numbers 之间自动进行类型转换,当一个字符串使...b : c Lua 中可以这样实现: (a and b) or c 基本语法 赋值语句 遇到赋值语句 Lua 会先计算右边所有的然后再执行赋值操作,所以我们可以这样 进行交换变量的: x...,errHandleFun),参数是被调用函数,错误函数处理 2.执行结果 pcall:返回错误信息时,已经释放了保存错误发生情况的栈信息。...xpcall:会在栈信息释放之前调用错误处理程序(可以使用debug库收集错误信息) 3.返回结果 pcall 返回 nil错误信息 xpcall返回nil , 无错误信息 local fun

39410

先检查两者之一是否有元表(metatable)

例如:可以监控网站的访问次数,监控UPS和天气温度等; 元表可以修改一个面对一个未知操作时的行为。例如,假设a和b都是表,那么可以通过元表定义Lua语言如何计算表达式a+b。...当Lua语言试图将两个表相加时,它会先检查两者之一是否有元表(metatable)且该元表中是否有__add字段。...如果Lua语言找到了该字段,就调用该字段对应的,即所谓的元方法(metamethod)(是一个函数)。...因此 执行最后一行 t + t1的时候,会检查元表中是否存在 t1 中是否存在 __add 方法,如果存在,则调用该元方法,否则查找 t2,如果还是不存在,将会抛出异常。...实际,这些访问会引发解释器查找一个名为 __index 的元方法。如果没有这个元方法,那么像一般情况下一样,结果就是nil;否则,则由这个元方法来提供最终结果。

51930

Lua+OpenResty快速入门

Lua的安装 linux安装Lua非常简单,只需要下载源码包并在终端解压、编译即可使用。...方式一: 我们需要一个文件名为 hello.lua,文件中添加要执行的代码,然后通过命令 lua hello.lua执行,会在控制台输出对应的结果。...nil是一种只有一个nil的类型,它的作用可以用来与其他所有进行区分,也可以当想要移除一个变量时,只需要将该变量名赋值为nil,垃圾回收就会会释放该变量所占用的内存。...不管是整型还是双精度浮点型,使用type()函数来取其类型,都会返回的是number >type(3) -->number >type(3.3) -->number 所以它们之间是可以相互转换的,同时,具有相同算术的整型和浮点型...(5)close 语法: ok,err = redis:close(),关闭当前连接,成功返回1,失败返回nil错误信息 (6)redis命令对应的方法 lua-resty-redis中,所有的

2.1K10

【游戏开发】小白学Lua——从Lua查找表元素的过程看元表、元方法

本篇博客,就让我们从Lua查找表元素的过程,来探讨学习一下Lua中的元表。 一、什么是元表 Lua table中我们可以访问对应的key来得到value,但是却无法对两个table进行操作。...当Lua试图对两个表进行相加时,先检查两者之一是否有元表,之后检查是否有一个叫"__add"的字段,若找到,则调用对应的。"...__add"等即时字段,其对应的(往往是一个函数或是table)就是"元方法"。...如果说这样去理解的话,就大错特错了,实际即使将A的元表设置为B,而且B中也确实有这个成员,返回结果仍然会是nil,原因就是B的__index元方法没有赋值。...Lua查找一个表元素的规则可以归纳为如下几个步骤: Step1:表自身中查找,如果找到了就返回该元素,如果没找到则执行Step2; Step2:判断该表是否有元表(操作指南),如果没有元表,则直接返回

1.6K30

Lua连续教程之Lua中的数值

同时,具有相同算术的整型和浮点Lua语言中是相等的: >1 == 1.0 --true >-3 == -3.0 --ture >0.2e3 == 200 --ture 少数情况下...算术运算 除了加减乘除、取负数等常见的算术运算外,Lua语言还支持取整除法、取模和指数运算。 两个整数型进行加减乘除和取负操作的结果仍然是整型。...一个程序启动时,系统固定使用1为种子初始化随机数发生器。如果不设置其他的种子,那么每次程序运行时都会生成相同的随机数序列。...因此,数值的表示范围和精度上都是有限制的。标准Lua使用64个比特位来存储整型,其最大为2^{63}-1,约等于10^{19};精简Lua使用32个比特位存储整型,其最大约为20亿。...Lua语言中,这种行为对所有涉及整型算术运算都是一致且可预测的: >math.maxinteger + 1 == math.mininteger --ture >math.mininteger

4.1K20

Kong插件开发向导

使用 lua-nginx-module 模块可以 Nginx 中启用 Lua 脚本功能,Kong 与 OpenResty 一起发布,OpenResty 中已经包含了 lua-nginx-module... Admin API 中公开端点等等,每个插件都可以通过向插件添加新模块来完成,插件的结构大致如下 lua-plugin ├── api.lua ├── daos.lua ├── handler.lua....handler 可用的上下文 插件接口允许用户覆盖 handler.lua 文件中的以下任何方法, Kong 的执行生命周期的各个切点实现自定义逻辑: HTTP Module...ssl_certificate SSL 握手提供证书时执行 :rewrite() rewrite 从客户端接收到请求,进入 rewrite 段执行,注意,在这个阶段没有识别服务,也没有消费者介入,只有配置成全局插件才会执行此处理程序...protocols table 插件运行的协议 table boolean 插件是否生效 tags table 插件的标签 大多数情况下,用户可以使用默认,或者让用户启用插件时指定,以下是一份我自定义插件中写的简单

1.5K21

Lua基本语法、数据类型、变量

注释 --[=[ 多行注释 多行注释 ]=] nil nil 类型表示一种没有任何有效,它只有一个 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 数据类型 Lua...可以存储变量中,作为参数传递或结果返回。...3.在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字 变量 Lua 变量有三种类型:全局变量、局部变量、表中的域。...a, b = 10, 2*x a=10; b=2*x 遇到赋值语句Lua会先计算右边所有的然后再执行赋值操作,所以我们可以这样进行交换变量的: x, y =...,Lua会一直以变量个数为基础采取以下策略: 1.变量个数 > 个数,按变量个数补足nil 2.变量个数 < 的个数, 多余的会被忽略

73440

信不信让你1天学会一门编程语言

3 Lua基本知识点3.1 环境安装下载地址:https://www.lua.org/download.html在这个地方下载好Lua的源码,然后自己的机器上进行编译,具体Ubuntu可以使用命令...条件表达式中相当于false。一个全局变量第一次赋值前的默认就是nil,将nil赋予一个全局变量等同于删除它。boolean:包含两个:false和true。...Lua将false和nil看作是“假”,其他的都为“真”。number:用于表示实数,可以表示整数和浮点数。Lua中的number类型是双精度浮点数。支持基本的算术运算和数学函数。...Lua中,nil和false是假(falsy values),而所有其他(包括所有数字、字符串、表、函数等)都是真值(truthy values)。...如果发生错误,Result方法会返回一个错误

45461

Lua 基础

数据类型 描述 说明 nil 这个最简单,只有nil属于该类,表示一个无效条件表达式中相当于false)。 nil 作比较时应该加上双引号 boolean 包含两个:false和true。...使用 # 来计算字符串的长度 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字 function 由 C 或 Lua 编写的函数 userdata 表示任意存储变量中的...多返回 Lua函数中,return后列出要返回的的列表即可返回多值。 可变参数 Lua 函数可以接受可变数目的参数,和 C 语言类似,函数参数列表中使用三点 ... 表示函数有可变的参数。...泛型 for 迭代器 泛型 for 自己内部保存迭代函数,实际它保存三个:迭代函数、状态常量、控制变量。...Lua table 使用关联型数组,可以用任意类型的来作数组的索引,但这个不能是 nilLua table 是不固定大小的,可以根据自己需要进行扩容。

2.2K00

Lua编译执行错误

发生错误的情况中,函数loadfile会返回nil错误信息,以允许我们按自定义的方式来处理错误。此外,如果需要多次运行一个文件,那么只需要调用一次loadfile函数后再多次调用它的返回结果即可。...一种常见的误解是认为加载一段程序也就是定义了函数,但实际Lua语言中函数定义是在运行时而不是在编译时发生的一种赋值操作。...相反,只要错误发生,Lua语言就必须提供处理错误的方式。 Lua语言会在遇到非预期的情况时引发错误。例如,当试图将两个非常值类型的相加,对不是函数的进行调用,对不是表类型的进行索引等。...当一个函数发现某种意外的情况发生时,进行一场处理时可以采取两种基本方式:一种是返回错误代码(通常是nil或者false),另一种是通过调用函数error引发了一个错误。...所以Lua语言的行为是由应用程序的第一次调用而触发的,这类调用通常是要求Lua语言执行一段代码。如果执行中发生了错误,那么调用会返回一个错误代码,以便应用程序采取适当的行为来处理错误

1.7K30

如何优雅地Redis中使用Lua

字符串类型 多行字符串回复 table类型(数组形式) 状态回复 table类型(只有一个ok字段存储状态信息) 错误回复 table类型(只有一个err字段存储错误信息) redis还提供了redis.pcall...脚本中可以使用return语句将返回给客户端,如果没有执行return语句则默认返回nil Lua数据类型和redis返回类型转换规则 Lua数据类型 redis返回类型 数字类型 整数回复...(Lua的数字类型会被自动转换成整数) 字符串类型 字符串回复 table类型(数组形式) 多行字符串回复 table类型(只有一个ok字段存储状态信息) 状态回复 table类型(只有一个err字段存储错误信息...程序中使用EVALSHA命令的一般流程如下。 1)先计算脚本的SHA1摘要,并使用EVALSHA命令执行脚本。 2)获得返回,如果返回“NOSCRIPT”错误则使用EVAL命令重新执行脚本。...当脚本运行时间超过这一限制后,Redis将开始接受其他命令但不会执行(以确保脚本的原子性,因为此时脚本并没有被终止),而是会返回“BUSY”错误

2.4K41
领券