2014-09-22 50 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