文中– 两个横线开始单行的注释,–[[加上两个[和]表示多行的注释–]]。
— Table=Lua唯一的数据结构;
— 它们是关联数组。
— 类似于PHP的数组或者js的对象,
— 它们是哈希查找表(dict),也可以按list去使用。
— Dict的迭代默认使用string类型的key:
t={key1=’value1′, key2=false}
— String的key可以像js那样用点去引用:
print(t.key1) — 打印 ‘value1’.
t.newKey={} — 添加新的 key/value 对。
t.key2=nil — 从table删除 key2。
— 使用任何非nil的值作为key:
u={[‘@!#’]=’qbert’, [{}]=1729, [6.28]=’tau’}
print(u[6.28]) — 打印 “tau”
— 对于数字和字符串的key是按照值来匹配的,但是对于table则是按照id来匹配。
a=u[‘@!#’] — 现在 a=’qbert’.
b=u[{}] — 我们期待的是 1729, 但是得到的是nil:
— b=nil ,因为没有找到。
— 之所以没找到,是因为我们用的key与保存数据时用的不是同一个对象。
— 所以字符串和数字是可用性更好的key。
— 只需要一个table参数的函数调用不需要括号:
function h(x) print(x.key1) end
h{key1=’Sonmi~451′} — 打印’Sonmi~451′.
for key, val in pairs(u) do — Table 的遍历.
print(key, val)
end
— _G 是一个特殊的table,用于保存所有的全局变量
print(_G[‘_G’]==_G) — 打印’true’.
— List 的迭代方式隐含会添加int的key:
v={‘value1’, ‘value2’, 1.21, ‘gigawatts’}
for i=1, #v do — #v 是list的size
print(v[i]) — 索引从 1 开始!! 太疯狂了!
end
— ‘list’并非真正的类型,v 还是一个table,
— 只不过它有连续的整数作为key,可以像list那样去使用。