LUA和C#语法比较(强化记忆)

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)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值