2014-09-22 52 views
1

我是一个卢阿新手,我有一个问题,唠叨我好几天。如何设计lua程序纠正?

例如,在C语言中,我有如下的结构体:

struct userinfo{ 
    int id, 
    char *name, 
    int age 
} 

如果我要定义不同用户的信息,我可以这样做:

struct userinfo user1; 
struct userinfo user2; 

但在Lua ,我不知道如何正确实现这个功能。我想我可以这样做:

local userinfo = {} 

function userinfo.new(param) 
    local self = {id = param.id, name = param.name, age = param.age} 
    return self 
end 

return userinfo 

local info = require "userinfo" 
local user1 = info.new({id = 1, name = "xxx", age = 20}) 
local user2 = info.new({id = 2, name = "yyy", age = 20}) 

这看起来像满足我的需求,但感觉很奇怪。

我想知道如何使用lua自己的方式而不是c来设计程序。

请给我看代码,或者提供一些文档。非常感谢!

+1

这就像完美的惯用Lua代码。做得好!你为什么觉得这很奇怪? – 2014-09-22 05:08:05

+1

对于纯数据字段(即表中没有函数),不需要使用如您的示例中的“新”函数。只需正常申报表。此外,您正在分配临时表并将它们复制为空。 – michaelmeyer 2014-09-22 05:25:19

回答

3

您可以避免创建临时表来传递参数。这会使用更少的内存,并且速度会更快一些。

local userinfo = {} 

function userinfo.new(id, name, age) 
    return {id = id, name = name, age = age} 
end 

return userinfo 

--- 

local info = require "userinfo" 
local user1 = info.new(1, "xxx", 20) 
local user2 = info.new(2, "yyy", 20) 

但是请注意,在Lua中,只使用原始表格完全可以。以下是完全可以接受的(以及最快的解决方案):

local user1 = {id = 1, name = "xxx", age = 20} 
local user2 = {id = 2, name = "yyy", age = 20} 
+0

非常感谢。但我也有一个问题。如果在大型项目中,许多差异模块将使用userinfo。不同的人可以知道userinfo包含哪些字段?在c语言中,他们可以读取struct userinfo,但在lua中,我该怎么办?也许我们可以查看文件或评论。 – user2097991 2014-09-22 10:21:14

+0

你可以使用评论我们的源代码。例如,我有时会将检查添加到面向用户的函数的开始,这些函数执行诸如checkInteger(id); checkString(名称); checkNumber(age)'等等。这样人们可以阅读“好的,id需要是一个整数”。我只在图书馆的“外向型”入口点上做这件事,而不是在所有功能上。 – kikito 2014-09-22 10:41:09