level 3
--代码如下
Table = {}
Table.new = function()
return {
a=1,
b=2,
c=
{
[1]=31,
[2]=32,
[3]=33,
},
}
end
Table.show = function(tab)
print("a="..tab.a)
print("b="..tab.b)
print("c={"..tab.c[1]..","..tab.c[2]..","..tab.c[3].."}")
end
mytab = Table.new()
Table.show(mytab)
2014年02月08日 03点02分
2
level 3
问题是,像Table.new()这样的函数,他的返回数组中只可以使用枚举的方式返回二维数组中的元素么?
2014年02月08日 03点02分
3
level 13
LUA的表既可以是散列表也可以是数组还可以混合,比如你例子中的C就是个纯数组,赋值的时候可以直接写为:c={31,32,33}
2014年02月08日 23点02分
4
首先,谢谢回帖,昨天到晚上十点多的时候我还看了一下,以为这帖子就要石沉大海了呢。 然后呢,你说的这种方法我也知道。不过这样同样是枚举啊。 我是想问一下,再返回函数里作为局部变量调用数组的时候,返回值可以不枚举么?
2014年02月09日 10点02分
level 13
不太明白你要求,题目里面这样写法是最简便的。一定要用局部变量先赋值也可以:
Table.new = function ()
local tab = {}
tab.a = 1
tab.b = 2
tab.c = {31,32,33}
retuen tab
end
2014年02月09日 11点02分
5
return 写错。爪机弄起来麻烦,将就看吧。
2014年02月09日 11点02分
回复 沙城雨人 :恩恩,能看懂。
2014年02月09日 11点02分
level 3
举个例子
---------
mytab = {}
mytab.new = function()
mytab.a=1,
mytab.b=2,
mytab.c=
{
[1]=31,
[2]=32,
[3]=33,
},
}
end
mytab.show = function()
print("a="..mytab.a)
print("b="..mytab.b)
print("c={"..mytab.c[1]..","..mytab.c[2]..","..mytab.c[3].."}")
end
mytab.new()
mytab.show()
---------
这样写的,如果以后想添加个C的元素的,可以直接再追加函数
mytab.add_c = function()
local n = table.getn(matab.c)
c[n+1] = 30+n
end
但是之前的那个写法,把matab作为函数参数穿进去的话,返回就没办法了。
2014年02月09日 11点02分
6
补充函数写错了,应该是 mytab.add_c = function() local n = table.getn(mytab.c) mytab.c[n+1] = 30+n end
2014年02月09日 11点02分
level 10
table.show的参数是一个table,函数里面不能用泛型for做显示功能么
2014年02月09日 13点02分
7
可以用for,这个就是懒的写了...
2014年02月10日 01点02分
level 3
我重新说下问题吧,之前写的有点乱
2楼的写法中,是定义一个表模板,之后只要调用
mytab1 = Table.new()
mytab2 = Table.new()
就可以生成一个个的新表,且每个表都是符合Table格式的,但是表的格式都是一样的,而且没法固定修改
而6楼的写法,是直接写了一个表的格式,然后通过mytab.add_c()一类的函数可以直接修改表的结构,但是这样的修改只是针对mytab这一个表的,如果需要多个表,就需要写多个表及其函数,就是再添加mytab2.new()和mytab2.add_c()一类的
现在我是想在2楼的写法中,添加一个 Table.add_c(tablename)一类的函数
使用
Table.add_c(mytab1)
或者是
mytab1 = Table.add_c()
就可以修改其中某一个表的结构。但是没有找到有效的实现方法。
2014年02月10日 01点02分
10
level 3
好吧,问题解决了,是我想多了,根本就不用返回,数组做形参,修改后自动保存
Table = {}
Table.new = function()
return {
a = 1,
b = 2,
c = {1,2,3}
}
end
Table.show = function(tab)
print("a="..tab.a)
print("b="..tab.b)
local str = "c={"
local n = table.getn(tab.c)
for i=1,n,1 do
str = str..tab.c[i]..","
end
print(str.."}")
end
Table.add_c = function(utab)
utab.c[4] = 4
end
mytab = Table.new()
mytab2 = Table.new()
Table.add_c(mytab)
Table.show(mytab)
Table.show(mytab2)
-------以下是输出---------
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "test2.lua"
a=1
b=2
c={1,2,3,4,}
a=1
b=2
c={1,2,3,}
>Exit code: 0
2014年02月10日 01点02分
12
level 13
lua的函数名、表名都是地址,直接作为参数传过去就能用。
2014年02月10日 02点02分
14
level 13
另外,我看你的做法是想OO编程,你仔细看一下书里面向对象编程那一部分,设定一下class的初始定义,后面就一直可以用类来做了。
2014年02月10日 02点02分
15
恩恩,好久没写面向对象了,类都忘没了
2014年02月10日 04点02分