目录
- 1.HelloWorld
- 函数关系
- 代码结尾
- 命名规则
- 2.代码注释
- 单行注释
- 多行注释
- 文档注释
- 3.变量
- 语法格式
- 命名规则
- 4.基本数据类型
- 类型区别
- 数值类型
- 布尔类型
- 字符串类型
- char类型
- 语言对比
- 5.特殊符号
- +
- ++与--
- 6.常用运算符
- 复合赋值运算符
- 关系运算符
- 逻辑运算符
- 7.分支结构
- if语句
- if...else...语句
- if...else if...语句
- switch...case...语句
- 8.循环结构
- for语句
- while语句
- do...while语句
- 关键字
- 9.数组
- 基础概念
- 代码格式
- 10.函数
- 语法格式
- 代码顺序
- 函数作为参数传递
- 作用域区别
- PS:
1.HelloWorld
函数关系
C#:有明确的所属类
Lua:一个独立的方法,无明确的所属类
代码结尾
C#:必须以;结尾,否则语法错误
Lua:不需要结尾符号,或者以;号结尾
命名规则
C#:方法和类都是帕斯卡命名法
Lua:全小写?
2.代码注释
单行注释
C#://
Lua:- - 这里中间没空格,因为CSDN连着两个-会合并成一个
多行注释
C#:/* */
Lua:- -[[ - -]],- -[[ ]],- -[[ ]]- -
文档注释
C#:///
Lua:没有?
3.变量
语法格式
C#:数据类型 变量名 = 值
Lua:变量名 = 值
命名规则
C#:驼峰命名法
Lua:驼峰命名法;全小写?
4.基本数据类型
类型区别
C#:强类型语言,声明变量必须要明确的指定数据类型
Lua:弱类型语言,声明变量时不需要指定类型,
变量的类型由变量内存储的数据决定
数值类型
C#:int,float,double
Lua:number
布尔类型
C#:bool
Lua:boolean
字符串类型
C#:必须使用双引号包裹
Lua:可以使用双引号,也可以使用单引号或者两个中括号[[]](中括号包裹
的字符串是原格式输出)
char类型
C#:有char类型,单引号包裹
Lua:没有
语言对比
语言类型
C#:编译型
Lua:解析型
数据类型
C#:强类型
Lua:弱类型
5.特殊符号
+
C#:数学意义上的相加;字符串相连
Lua:只是数学意义上的相加;字符串相连用". ."[两个点]
++与–
C#:有效
Lua:无
6.常用运算符
复合赋值运算符
C#:+= -= *= /= %=
Lua:没有
关系运算符
C#:不等于!=
Lua:不等于~=
逻辑运算符
C#:&& || !
Lua:and or not
7.分支结构
if语句
C#:代码体部分用一个{ }进行包裹
Lua:用then和end代替{ }进行包裹
if…else…语句
C#:if和else下方都跟着一个代码体,每个代码体都需要用{ }包裹
Lua:只有在if语句下方才会出现then,整个if代码的结尾处用end
if…else if…语句
C#:else if两个单词之间是有空格的
Lua:elseif两个单词相连且没有空格
switch…case…语句
C#:有
Lua:没有
8.循环结构
for语句
C#:参数之间用;分号分割
Lua:参数之间用,逗号分割
while语句
C#:代码体部分用{ }包裹
Lua:代码体部分用do和end包裹
do…while语句
C#:有
Lua:无,但有类似的语句;
布尔表达式不成立的时候才会继续循环
关键字
C#:有break和continue
Lua:只有break
不过我们可以利用goto语句实现continue
for i=1, 3 do
if i <= 2 then
print(i, "yes continue")
goto continue
end
print(i, " no continue")
::continue::
print([[i'm end]])
end
--[[
输出结果:
1 yes continue
i'm end
2 yes continue
i'm end
3 no continue
i'm end
--]]
9.数组
基础概念
长度
Lua:长度不固定,可以给后续的索引位置继续赋值
下标
C#:从0开始
Lua:从1开始
类型
C#:只能存储一种类型的数据
Lua:可以存储多种类型的数据
代码格式
声明数组
C#:
Lua:
数组长度
C#:数组本身的属性
Lua:使用table.getn(table名)或者使用#table(只能用于数组或者key值连续的table)
遍历数组
C#:for循环遍历数组
Lua:for循环遍历数组
10.函数
语法格式
C#:
Lua:
Lua函数可以随意传参数,比如需要2个参数的方法你可以传3个参数但是只会用到前2个,传1个的话第2个参数默认为空。
允许多返回值,如s, e = string.find("www.runoob.com", "runoob")
function maximum (a)
local mi = 1 -- 最大值索引
local m = a[mi] -- 最大值
for i,val in ipairs(a) do
if val > m then
mi = i
m = val
end
end
return m, mi
end
print(maximum({8,10,23,12,5}))
以上代码执行结果为:
23 3
Lua 函数可以接受可变数目的参数,在函数参数列表中使用三点 ...
表示函数有可变的参数。
function average(...)
result = 0
local arg={...} --> arg 为一个表,局部变量
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. #arg .. " 个数")
return result/#arg
end
print("平均值为",average(10,5,3,4,5,6))
代码顺序
C#:编译型语言,代码顺序无所谓
Lua:解析型语言,必须先声明,然后才可以调用
函数作为参数传递
C#:使用委托实现
Lua:没有委托的概念,真的可以直接当成参数
作用域区别
C#:默认是私有,变量的作用域由声明这个变量的位置决定。在哪个大括号内声明的变量,就在该大括号的范围内都有效。
全局变量声明完毕后,就算不手动初始化赋值,也是有默认值的。但是局部变量声明完毕后,如果不给它手动赋值,是无法直接使用这个变量的
Lua:默认全部是全局变量,就算是声明在函数内的变量,也是全局变量。如果想在 Lua 中声明局部变量,需要使用“local”关键字明确标示出来。变量的默认值是 nil,类似于 C#中的 null。
在方法中使用的全局变量可以在外部获取,但是如果前面没调用过该方法那么会返回nil,调用过会返回在方法中所赋的值。
PS:
Lua中:
静态方法,属性,结构体用 .调用
调用实例对象的普通方法用 :
function可以省略方法名传递(类似lambda)