_G
变量前面不要加 local 都可以称之为全局变量
全局变量其实本质上也是一个table,它把我们创建的全局变量都保存到一个table里了。
而这个table的名字是:_G
s=6
print(s)
print(_G["s"]);
print(_G.s);
type(v)
将参数的类型编码为一个字符串返回。 函数可能的返回值有 "nil
" (一个字符串,而不是 nil 值), "number
", "string
", "boolean
", "table
", "function
", "thread
", "userdata
"。
tostring(v)
可以接收任何类型,它将其转换为人可阅读的字符串形式。 浮点数总被转换为浮点数的表现形式(小数点形式或是指数形式)。 (如果想完全控制数字如何被转换,可以使用
tonumber(e,[,base])
如果调用的时候没有 base
, tonumber
尝试把参数转换为一个数字。 如果参数已经是一个数字,或是一个可以转换为数字的字符串, tonumber
就返回这个数字; 否则返回 nil。
select(index,...)
如果 index
是个数字, 那么返回参数中第 index
个之后的部分; 负的数字会从后向前索引(-1 指最后一个参数)。 否则,index
必须是字符串 "#"
, 此时 select
返回参数的个数。
ipairs(t)
返回三个值(迭代函数、表 t
以及 0 ), 如此,以下代码
for i,v in ipairs(t) do
--body
end
将迭代键值对(1,t[1]
) ,(2,t[2]
), ... ,直到第一个空值。
pairs(t)
如果 t
有元方法 __pairs
, 以 t
为参数调用它,并返回其返回的前三个值。
否则,返回三个值:next
函数, 表 t
,以及 nil。 因此以下代码
for k,v in pairs(t) do
--body
end
能迭代表 t
中的所有键值对。
print(t)
接收任意数量的参数,并将它们的值打印到 stdout
。 它用 tostring
函数将每个参数都转换为字符串
rawequal(v1,v2)
在不触发任何元方法的情况下 检查 v1
是否和 v2
相等。 返回一个布尔量。
rawget(table,index)
在不触发任何元方法的情况下 获取 table[index]
的值。 table
必须是一张表; index
可以是任何值。
ta={"1",2,"rrr",6}
print(rawget(ta,3))
--rrr
rawlen(v) --5.2以上
在不触发任何元方法的情况下 返回对象 v
的长度。 v
可以是表或字符串。 它返回一个整数。
rawset
在不触发任何元方法的情况下 将 table[index]
设为 value
。 table
必须是一张表, index
可以是 nil 与 NaN 之外的任何值。 value
可以是任何 Lua 值。
这个函数返回 table
。
ta={2,23,"33"}
rawset(ta,2,"44")
for k,v in pairs(ta) do
print(k,v)
end
--ta={2,"44","33"}
setmetatable(table, metatable) / getmetatable(object)
给指定表设置元表/获取原表
1.元方法名
Lua其实已经规定好了各种算术操作符的元方法名字,如:
__add:加法
__sub:减法
__mul:乘法
__div:除法
__unm:相反数
__mod:取模
__pow:乘幂
__eq :==
__lt :<
__le :>=
local mt = {};
mt.__add = function(t1, t2)
print("两个table相加");
end
local t1 = {};
local t2 = {};
-- 设置元表
setmetatable(t1, mt);
setmetatable(t2, mt);
-- 进行加法操作
local result = t1 + t2;
--两个table相加