Lua知识点整理
Lua知识点整理
基础
Lua 数据类型
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
boolean
boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true。
123456789101112131415print(type(true))print(type(false))print(type(nil))if false or nil then print("至少有一个是 true")else print("false 和 nil 都为 false")endif 0 then print("数字 0 是 true")else print("数字 0 为 false")end
以上代码输出为:
12345booleanbooleannilfalse 和 ni ...
Lua是一门怎样的语言
Lua是一门怎样的语言
前言
曾经面试时被面试官问过这样的一个问题:“你觉得Lua是一门怎样的语言”,因为问题问得太泛,我当时一下子懵逼了不知道从哪说起。
Lua起源
Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。
设计目的
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
特性
轻量级
它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
可扩展
Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
其他特性
支持面向过程(procedure-oriented)编程和函数式编程(functional p ...
经典排序算法详解
经典排序算法详解
冒泡排序
算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
算法实现
12345678910111213141516171819202122232425public static void BetterSort(int[] array){ //外循环从1开始,进行N-1轮比较 for (int i = 1; i < array.Length; i++) { //标记是否有发生交换 bool exchange = false; //内循环从0开始,到array.Length-i结束,因为后面的i个数已经是有序的 for (int j = 0; j < array.Length - i; j++) { ...
浅谈C#的GC机制
浅谈C#的GC机制
前言
在诸如原生C++这类语言中,程序员需要手动管理内存,这无疑是十分繁琐的,且常常会因为程序员忘记释放掉不再需要的内存而造成内存泄漏,甚至试图访问已经释放了的内存造成程序错误和安全漏洞,而且这种bug比其他大多数的bug都要严重,因为无法预测其发生时间和后果。
什么是GC
GC,即Garbage Collection,意为垃圾回收,区别于诸如原生C++这种需要程序员手动管理内存的机制,垃圾回收机制可以让程序员不再过于关心内存管理问题,垃圾回收器会自行在合适的时刻收集需要释放掉的对象,进行内存释放。
垃圾回收算法
既然GC可以自行回收对象,那么面临的一个问题是,需要计算出哪些对象是需要被回收的。
.Net中采用的GC算法可以简单地看作标记压缩法(Mark Compact)。除此之外,常见的GC算法有很多种,包括引用计数法(Reference Counting)、标记清除法(Mark Sweep)、复制法(Copy Collection)等。
标记压缩算法可以分为两个阶段
标记
压缩
标记
因为引用计数法无法解决循环依赖的问题,CLR改为使用一种引用跟踪算法。引用 ...
C#中的String究竟是个怎样的类型
面试官:c#中的String是什么类型呢?
我:应该是个值类型
面试官:感谢您参与本司面试
面试官:c#中的String是什么类型呢?
我:是个特殊的引用类型!
面试官:怎么个特殊法呢?
我:。。。
String类型对象直接派生自Object,所以String是引用类型,因此,String对象总是存在于堆上,永远不会跑到线程栈。
但String类型却又有值类型的特性,所以问到String究竟是值类型还是引用类型时,我们一般称为特殊的引用类型。
具体请看以下例子:
123456string str1 = "str1";string str2 = str1;str1 = "str3";Console.WriteLine(str1);//str3Console.WriteLine(str2);//str1
按普通引用类型的特性来理解以上代码,str2应该指向str1的同一个内存地址,若此时修改str1的值,str2应该也会发生变化,但修改str1的值为“str3”后,str2的值仍然为“str1”,这就是上文所说的String类型具有值类型的特 ...
两年后再回头看当初的毕设《无境》
无境
无境,是我两年前用Unity3D引擎制作的一款ARPG游戏Demo,也是我当时的毕业设计。客观地说,这是一个普通得不能再普通的游戏Demo,因为时间关系,作品最终效果与最初构思的模样已经大相径庭,从最初可以勉强面向玩家的游戏demo,变成了一个没有游戏性、只是个人技术总结,以及找工作时作为作品演示的Demo。为了方便面试时演示,我为这个Demo录制了一个视频投稿到了B站。
我甚至在视频结尾留下了自己的QQ,期待有相应岗位的招聘人员能找到我,而至今,我只从这视频里收到4399公司的U3D相关视频剪辑岗位的面试邀请,可谓滑天下之大稽。
到此,关于这个普普通通的毕设故事应该结束了,嗯,就这。
预料之外
出乎预料的是,这个投稿在B站里很快就得到了一大波播放量,有好几位朋友来私聊我说在B站频道推荐里看到我的毕设,截至此时,视频已经突破5w播放量,1000+投币以及1000+收藏,起初我只是惊讶这个视频的曝光度,但对这个数据并没有太明确的概念,直到有些人明确告诉我,第一个视频就有这个成绩,是很多新人UP主做不到的,而我没有持续更新,可惜了。或许是吧,但是我也真的没什么内容 ...
游戏程序员的学习之路
游戏程序员的学习之路
游戏程序员的学习之路
Milo Yip
2016/12/8