自己动手实现Lua(五)lua栈

 Lua栈是宿主语言(对于官方Lua来说是C语言,对于本书来说是Go语言)和Lua语言进行沟通的桥梁。

Lua的数据类型和值

在lua代码里,变量是不携带类型信息的,变量的值才携带类型信息。换句话说,任何一个lua变量都可以被赋予任意类型的值。

 在语言层面,Lua一共支持8种数据类型,分别是nil、布尔(boolean)、数字(number)、字符串(string)、表(table)、函数(function)、线程(thread)和用户数据(userdata)。

栈索引

为了便于用户使用,栈索引可以是负数。正数索引叫做绝对索引,从1(栈底)开始递增,负数索引叫做相对索引,从-1(栈顶)开始递减。LuaAPI函数会在内部把相对索引转换为绝对索引。

假设Lua栈容量是n,栈顶索引是top(0 < top <= n)。我们称位于[1,top]闭区间内的索引为有效(Valid)索引,位于[1,n]闭区间的索引为可接受(Acceptable)索引。如果要往栈里写入值,必须给LuaAPI提供有效索引,否则会导致错误。如果仅仅是从栈里读取值,则可以提供可接受索引(无效的返回nil)。

 

posted @ 2023-05-10 17:01  mc宇少  阅读(176)  评论(0编辑  收藏  举报