lua

pcall(f[,arg1,..])

  • 以保护模式调用函数f
    第一个返回值是状态码(一个布尔量), 当没有错误时,其为真。 此时,pcall 同样会在状态码后返回所有调用的结果。

next (table [, index])

运行程序来遍历表中的所有域。 第一个参数是要遍历的表,第二个参数是表中的某个键。 next 返回该键的下一个键及其关联的值。 如果用 nil 作为第二个参数调用 next 将返回初始键及其关联值


__newindex

  • 当settable操作,key存在直接赋值。否则调用__newindex元方法(如果有)

local t = {}
--t[1] = 1
print("t:",t)   
setmetatable(t,{__newindex = function(t,k,v)
         print(t,k,v) ---和上面的t是同一个
end}) 
t[2] = 2
t[1] = 11

_ENV 外部的局部变量

被 _ENV 用于值的那张表被称为 环境。

Lua 保有一个被称为 全局环境 特别环境。

1,设置函数环境——setfenv

环境:暂且简单理解成Namespace。解决命名冲突问题。

(当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题。setfenv函数可以满足我们的需求。)

  setfenv(f, table):设置一个函数的环境

  (1)当第一个参数为一个函数时,表示设置该函数的环境

  (2)当第一个参数为一个数字时,为1代表当前函数,2代表调用自己的函数,3代表调用自己的函数的函数,以此类推

原文地址:https://www.cnblogs.com/Jaysonhome/p/13485179.html