Lua中assert( )函数的使用

当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等。你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息。
assert(a,b) a是要检查是否有错误的一个参数,b是a错误时抛出的信息。第二个参数b是可选的。
print("enter a number:")
n = io.read("*number")
if not n then
    error("invalid input")
end

Lua提供了专门的内置函数assert( )来完成上述的类似功能

print("enter a number:")
n = assert(io.read("*number"), "invalid input")

assert首先检查的是第一个参数是否返回错误,如果不返回错误,则assert简单返回,否则则以第二个参数抛出异常信息。 
assert()是普通函数,他首先计算两个参数,然后在调用函数,如:

n = io.read()
assert(tonumber(n), "invalid input:" .. n .. "is not a number")

先进行tonumber(n), "invalid input:" .. n .. "is not a number"这两个参数的计算。

没用assert( )时:

input = io.read("*number")
print(input)

运行结果:

nil
[Finished in 0.3s]

用assert( )时:

input = assert(io.read("*number"))
print(input)

运行结果:

lua: D:\UserProfiles\BenLuo\Desktop\study\test.lua:44: assertion failed!
stack traceback:
    [C]: in function ‘assert‘
    D:\UserProfiles\BenLuo\Desktop\study\test.lua:44: in main chunk
    [C]: ?
[Finished in 0.3s with exit code 1]

原文地址:https://www.cnblogs.com/yunlongaimeng/p/9497458.html

时间: 2025-01-18 08:35:00

Lua中assert( )函数的使用的相关文章

Lua中的函数

[前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数放在一对圆括号中,即使调用函数时没有参数,也必须写出一对空括号.对于这个规则只有一种特殊的例外情况:一个函数若只有一个参数,并且此参数是一个字符串或table构造式,那么圆括号便可以省略掉.看以下代码: print "Hello World" --> print("Hell

C++调用lua中的函数

测试lua脚本 一.lua中的全局函数 lua中的全局函数保存在lua的global表里 二.lua模块中的函数 lua中的模块被放在lua的global表里,模块中的函数以变量的形式保存在模块表里,比如test模块里的PrintMessage函数保存在test表里,key为PrintMessage,value是函数体.所以调用模块里的函数,首先lua_getglobal把模块压入栈,接着lua_gettable或lua_getfield把函数压入栈,最后lua_pcall调用函数.

Lua中调用函数使用点号和冒号的区别

最简单的类 TSprite = { x = 0, y = 0, } function TSprite.setPosition(x, y) TSprite.x = x; TSprite.y = y; end TSprite.setPosition(1, 2); print("TSprite坐标(" .. TSprite.x .. "," .. TSprite.y .. ")"); mSprite.setPosition TSprite = { x

Lua中的常用语句结构以及函数

1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {"hello", 10} if nil ~= gTable[1] and "hello" == gTable[1] then print("gTable[1] is" , gStringTable[1]) elseif 10 == gTable[2] then print("gTable[2] is", gTable[2]) else prin

lua中函数简介

在lua中,函数是一种第一类值,它们具有特定的词法域. 第一类值表示在lua中函数与其他传统类型的值具有相同的权利.函数可以存储在变量中,全局变量或者拒不变量或者table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值. 词法域是什么意思呢,这是指一个函数可以嵌套在另一个函数中.内部的函数可以访问外部函数中的变量.接下来就会看到,这项听似平凡的特性将给语言带来极大的能力.因为它允许在Lua中应用各种函数式语言中的强大编程技术. 在lua中有一个容易混淆的概念是,函数与所有其他值一样都

Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

Lua语言基础汇总(8) -- Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那本文就是主要讲的是如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接

[转]Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如果定义这个指定的函数,这个指定的函数时什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

Lua程序设计 深入函数01

在Lua中,函数是一种"第一类值":表示在Lua中的函数与其他传统类型的值(例如:数字和字符串)是一样的,可以存储到变量(全局,局部均可)或table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值. "词法域":指一个函数可以嵌套在另一个函数中,内部的函数可以访问外部函数中的变量. Lua中的函数与所有其他值一样都是匿名的,当讨论一个函数时,实际上是在讨论一个持有某函数的变量.这与变量持有各种值一个道理,可以以多种方式来操作这些变量. a = {p =