Unity游戏开发客户端面经——lua(初级)

本文是关于Unity游戏开发中Lua初级面试的知识点总结,包括pairs与ipairs的区别、点与冒号的不同、面向对象实现、_index与_newindex、_rawset与_rawget、只读表的创建、Table、string类型、lua的GC算法以及C#与xlua交互的原理等。同时,讨论了Lua与C#的交互、类型系统、循环、闭包及其作用,深入探讨了lua如何实现C#委托功能。
摘要由CSDN通过智能技术生成

前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是lua常问问题总结,有帮助的可以收藏。


1.pairs与ipairs区别

        pairs会遍历所有key,对于key的类型没有要求,遇到nil时可以跳过,不会影响后面的遍历,既可以遍历数组部分,又能遍历哈希部分。

        ipairs只会从1开始,步进1,只能遍历数组部分, 中间不是数字的key忽略, 到第一个不连续的数字为止(不含),遍历时只能取key为整数值,遇到nil时终止遍历。

2.点和冒号区别

        点  :无法传递自身,需要显示传递

        冒号 :隐式传递自身

3.Lua如何实现面向对象

        Lua面向对象编程是基于元表metatable,元方法__index来实现的。

        通过元表的__index元方法,将一个table的__index元方法设置为另一个table,那么后者的方法就被前者继承。

        如果访问了lua表中不存在的元素时,就会触发lua的一套查找机制,也是凭借这个机制,才能够实现面向对象的。

        总结元表的查找步骤:

        在表中查找该元素,如果找到,返回该元素,找不到则判断该表是否有元表(setmetatable(A,B)     -- 把 B设为 A的元表 ),如果没有元表,返回nil,有元表则判断元表有没有__index方法不是直接看元表有该元素!),如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复上述步骤;如果__index方法是一个函数,则调用该函数,并返回该函数的返回值。

 4._index 与 _newindex的区别

        注意:__index 和__newindex归为元表方法。

        __index:当子脚本不存在被访问的元素的时候,lua就会调用__index,去父脚本里面查找该元素。

        __newindex:当赋值时,如果赋值一个不存在的索引。

        如果__newindex是一个表,那么会把这个值赋值到newindex所指的表中(有这个索引就修改,没有就创建),不会修改自己;

        如果__newindex是一个函数,那么会调用这个函数。

代码:

        1.__newindex指定一个函数

        2.__newindex指向一个空表

3.__newindex指定一个已经定义的表。

        只能在元表中指定

5._rawset与_rawget的区别

        _rawget:访问时,不想从__index 对应的元方法中查询值

        _rawset:更新时,不想执行__newindex 对应的元方法

6.如何实现一个只读表

        利用__index 与 __newindex来实现。

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值