0、可以将一个table想象成一种动态分配的对象,程序仅仅持有一个对他们的引用(或指针),Lua不会暗中产生table的副本或创建新的table。table永远是匿名的(anonymous),一个持有table的变量与table自身没有固定的关联性。感觉与python完全类似。
Lua中怎么分配一块大的连续的数组,只用语言本身。table.insert不行。
table中有那些接口,查一下?可以直接通过for k,v in pairs(table) do print(k,v) end得到。
Lua中获取某个变量的地址?
1、注意,print({} == {}) 输出false。因为table、userdata和函数,Lua是作引用比较的。也就是说,只有当他们引用一个对象时,才认为他们相等。而print("abcdef" == "abcdef")会返回true,因为在Lua在VM内对相同的string永远只保留一份copy。table例子:
2、通常写法:x = x or v,将x设置一个默认值v。
3、Lua允许多重赋值,比如local a,b = 1,2,则变量a和b都是局部变量,值分别为1,2。在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值。Lua总是会将等号右边值的个数调整到与左边的个数相一致。特殊例子:
4、Lua会调整一个函数的返回值数量以适应不同的调用情况。若将函数调用作为一条单独语句时,Lua会丢弃函数的所有返回值。若将函数作为表达式的一部分来调用时,Lua只保留函数的第一个返回值。只有当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时,才能获得它的所有返回值。这里所谓的“一系列表达式”在Lua中表现为4中情况:多重赋值、函数调用时传入的实参列表、table的构造式和return语句。特殊例子:
5、setfenv(f,table):
Sets the environment to be used by the given function.
f
can be a Lua function or a number that specifies the
function at that stack level: Level 1 is the function calling