Unity面试总结-Lua

1.写lua代码时需要注意什么?如何避免

  • #table 可以用来获取表的长度,但table中包含nil时,不能使用。
  • table.sort()排序时,table必须是连贯的,中间不能有nil。
  • 尽量使用局部变量,局部变量的存取会更快,且生命周期外就会被释放。
  • 使用iparis时,table的key必须是连续的。
  • next函数常用来进行无序遍历整张表
  • 调用库函数,如果很频繁,如string.formate("%s",str),math.abs 可以考虑函数局部化,能显著提高性能。
  • 全局变量不需要声明,如果要删除一个全局变量,只需为其赋值nil
  • lua中出了nil和false表示为假,其余值都表示为真(0,空串{})
  • {} 和 nil 表示不一样,{}表示表没有数据,nil表示不存在。
  • nil只能和自己相等。
  • 逻辑运算:A and B A为假返回a,否则返回b。A or B A为真返回A,否则返回B.
  • 不推荐数组下标为0开始。
  • lua 两个table之间不能直接相互运算,可以用元表为其中的table赋予属性。

2.Lua内存泄漏是什么?如何处理?

  • lua中有垃圾回收机制,理论上不会有内存泄漏。
  • 内存泄漏指:已经没有被使用了,但外部依然还有引用存在的对象。
    --函数中应该被申明为local的对象忘记加local
    local function test() 
        testTable = {} --这个testTabel会被存放在全局表_G中,GC时由于此对象还有引用存在,所以这里总是会有一个table泄露。 
        local mt = {} --mt加了local修饰,函数调用完后,引用也不复存在了,GC时会被回收。 
        setmetatable(testTable, mt) 
    end

    当它进行GC的时候,会从根部开始扫描所有的对象,如果某个地方对这个对象还有引用,就不会把这个对象内存collect,这个对象就没有被GC。

  • 编写代码去检测喽。

3.Lua中变量类型有哪些?8个

  • number:实数
  • string:字符串
  • boolean:真假
  • nil:空
  • table:表
  • function:函数
  • userdata:数据类  tonumber(tostring(userdata))
  • thread:线程

猜你喜欢

转载自blog.csdn.net/wang_lvril/article/details/109543629
今日推荐