Lua程序设计(八十五)

本文探讨了Lua的重要用途之一——用作配置语言。通过示例展示了如何使用Lua API解析配置文件,获取全局变量width和height的值,强调了使用Lua解析配置文件可以处理语法细节、支持复杂配置及方便程序扩展的优势。
摘要由CSDN通过智能技术生成

扩展应用

Lua 的重要用于之一就是用作配置(configuration) 语言。

基础知识

假设我们的 C 程序有一个窗口,并希望用户能够指定窗口的初始大小。我们可以使用环境变量或使用基于键值对的配置文件。但即便是一个简单的文本文件,我们需要对其进行进行解析。因此,我们决定使用一个 Lua 配置文件。它可以包含如下简单内容:

width = 200
height = 300

现在,我们使用 Lua API 来指挥 Lua 语言来解析该文件,并获取全局变量 widthheight 的值。

//从配置文件获取用户信息。
int getglobint(lua_State *L, const char *var) {
	int isnum, result;
	lua_getglobal(L, var);
	result = (int)lua_tointegerx(L, -1, &isnum);
	if (!isnum)
		error(L, "'%s' should be a number\n", var);
	lua_pop(L, 1);
	return result; 
}

void load(lua_State *L, const char *fname, int *w, int *h) {
	if (luaL_loadfile(L, fname) || lua_pcall(L, 0, 0, 0))
		error(L, "cannot run config. file: %s", lua_tostring(L, -1));
	*w = getglobint(L, "width");
	*h = getglobint(L, "height");
}

该程序调用了两次辅助函数 getglobint. getglobint 首先调用函数 lua_getglobal 将相应的全局变量的值压入栈,lua_getglobal 只有一个参数(除了无所不在的 lua_State),就是变量名。然后 getglobint 调用函数 lua_tointegerx 将这个值转换为整型以保证其类型正确。

使用 Lua 来解析配置文件的好处有以下几点。首先,Lua 为我们处理了所有的语法细节,甚至配置文件都可以有注释!其次,用户还可以使用 Lua 来实现一些更复杂的配置。例如,脚本可以提示用户输入某些信息,或者查询环境变量来选择合适的窗口大小:

if getenv("DISPLAY"== ":0.0" then
	width = 300; height = 300
else
	width = 200; heihgt = 200;

最后一个使用 Lua 的理由是,使用它以后,向程序添加新的配置机制时会很方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值