以下是小编整理的Lua脚本语言基本语法快速入门教程(共含3篇),仅供参考,希望能够帮助到大家。同时,但愿您也能像本文投稿人“晚睡早起”一样,积极向本站投稿分享好文章。
这篇文章主要介绍了Lua脚本语言基本语法快速入门教程,本文是一个简易教程,快速的罗列了常用语法,有一定编程语言基础的同学更容易看芯片,需要的朋友可以参考下
Lua语法与C语言有些相似也不太一样,写了语句学一下 微笑
--begina = --[[explain]] “ha”;print(a)if a == “ha” then print(“if test passed”)else print(“if used wrong”)endb,c=2,3print(b,c)b,c=c,bif b==3 and c==2 then print(“swap test passed”) print(b,c)else print(“swap error”)enddo b = 6 if b==6 then print(“code block test passed”) else print(“code block test error”) endenddo d=true; local e=“haha”endif d==true and e==nil then print(“local test passed”)else print(“local test error”)endc = 2^3if c == 8 then print(“squert test passed”)else print(“test error”)enda = “string will be ”..“connected”print(a)x = x or a --if not x then x = v endprint(x)print(type(asdf))c=3-1.2;print(c)d = [[怎么会 怎么会 你竟原谅了我?]]print(d)function test (w) print(“the num is ”..w) local add=w+1 return add;endb=test(5)print(add,b)t={ 100, [100] = “I‘m the 100th element”, fsy= { [‘age‘]=22, sex = “male”, --如果是字符串,可以去掉引号和括号 },--元素之间必须用,隔开 20, -- 相当于t[2]=20}print(t[0])print(t[1])print(t[100])print(t.fsy.age)print(t[2])g = { age = 3, add=function (s,n) s.age=s.age+n end}g:add(10) --相当于g.add(g,10)print(g.age)
运行的结果如下:
>lua -e “io.stdout:setvbuf ‘no‘” “hello.lua” haif test passed2 3swap test passed3 2code block test passedlocal test passedsquert test passedstring will be connectedstring will be connectednil1.8怎么会 怎么会 你竟原谅了我?the num is 5nil 6nil100I‘m the 100th element22>Exit code: 0
Lua是相当简单易学,本篇文章来给大家稍微讲一下Lua的语法,不会长篇累牍得把Lua的所有语法都讲一遍,这里通过以下几点来讲Lua语言的基础语法,
1 简介
由 clean C 实现。需要被宿主程序调用,可以注入 C 函数。
2 语法约定
Lua 的语法基于 BNF 的语法规则。
Lua 对大小写敏感。
2.1 保留关键字
C 语言中没有的关键字有:
代码如下:
and elseif function
in nil local not or
repeat then until
规范:全局变量以下划线开头。
2.2 操作符
C 语言中没有的操作符:
^
~=
// -- 向下取整
Lua 中没有的操作符:
+=
-=
2.3 字符串定义
采用转义符:通过转义符表示那些有歧义的字符
字符表示
a -- 代表字符 a
\97 -- 代表字符 a
\049 -- 代表数字字符 1
其他转义符表示
\\n -- 代表字符串 \n
\n -- 代表换行
注意数字字符必须是三位。其他字符则不能超过三位。
采用长括号:长括号内的所有内容都作为普通字符处理。
[[]] -- 0级长括号
[==[]==] -- 2级长括号
3 值与类型
Lua 是动态语言,变量没有类型,值才有。值自身携带类型信息。
Lua 有八种基本数据类型:nil, boolean, number, string, function, userdata, thread, table。
仅 nil 和 false 导致条件为假,其他均为真。
userdata 类型变量用于保存 C 数据。 Lua 只能对该类数据进行使用,而不能进行创建或修改,保证宿主程序完全掌握数据。
thread 用于实现协程(coroutine)。
table 用于实现关联数组。table 允许任何类型的数据做索引,也允许任何类型做 table 域中的值(前述
任何类型 不包含 nil),
table 是 Lua 中唯一的数据结构。
由于函数也是一种值,所以 table 中可以存放函数。
function, userdata, thread, table 这些类型的值都是对象。这些类型的变量都只是保存变量的引用,并且在进行赋值,参数传递,函数返回等操作时不会进行任何性质的拷贝。
库函数 type 返回变量的类型描述信息。
3.1 强制转换
Lua 提供数字与字符串间的自动转换。
可以使用 format 函数控制数字向字符串的转换。
4 变量
变量有三种类型:全局变量、局部变量、表中的域。
函数外的变量默认为全局变量,除非用 local 显示声明。函数内变量与函数的参数默认为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束(或者是直到下一个同名局部变量的声明)。
变量的默认值均为 nil。
代码如下:
a = 5 -- 全局变量
local b = 5 -- 局部变量
function joke()
c = 5 -- 局部变量
local d = 6 -- 局部变量
end
print(c,d) -->nil nil
do
local a = 6 -- 局部变量
b = 6 -- 全局变量
print(a,b); -->6 6
end
print(a,b) -->5 6
方便标记,-->代表前面表达式的结果。
4.1 索引
对 table 的索引使用方括号 []。Lua使用语法糖提供 . 操作。
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
4.2 环境表
所有全局变量放在一个环境表里,该表的变量名为 _env 。对某个全局变量 a 的访问即 _env.a (_env_ 只是为了方便说明)。
每个函数作为变量持有一个环境表的引用,里面包含该函数可调用的所有变量。
子函数会从父函数继承环境表。
可以通过函数 getfenv / setfenv 来读写环境表。
以上所述就是本文的全部内容了,希望大家能够喜欢。
这篇文章主要介绍了Go语言入门教程之基础语法快速入门,本文讲解了值类型、变量、常量、循环、条件语句、条件枚举等内容,需要的朋友可以参考下
Go语言是一个开源的,为创建简单的,快速的,可靠的软件而设计的语言,
Go语言实(示)例教程,通过过实例加注释的方式来介绍Go语言的用法。
Hello World
第一个程序会输出“hello world”消息。源代码如下:
代码如下:
package main
import “fmt”
func main() {
fmt.Println(“hello world”)
}
//通过go run来运行Go程序
$ go run hello-world.go
hello world
//它会花一段时间将源代码编绎成二进制文件,可以通过go build实现这一过程。
$ go build hello-world.go
$ ls
hello-world hello-world.go
//然后直接运行二进制文件
$ ./hello-world
hello world
Values:值类型
Go有许多值类型包括:strings, integers, floats, booleans, 等。下面是一些基础的示例。
代码如下:
package main
import “fmt”
func main() {
//字符串可以使用 + 来连接
fmt.Println(“go” + “lang”)
//整型和浮点数
fmt.Println(“1+1 =”, 1+1)
fmt.Println(“7.0/3.0 =”, 7.0/3.0)
//布尔类型,你可以使用布尔运算符
fmt.Println(true && false)
fmt.Println(true || false)
fmt.Println(!true)
}
$ go run values.go
golang
1+1 = 2
7.0/3.0 = 2.3333333333333335
false
true
false
Variables:变量
在Go语言中,变量是显式声明的;编辑器可以在函数调用检查类型的正确性。
代码如下:
package main
import “fmt”
func main() {
//用var声明一个或多个变量
var a string = “initial”
fmt.Println(a)
//你可以声明多个变量
var b, c int = 1, 2
fmt.Println(b, c)
//GO会通过默认值来确定变量类型
var d = true
fmt.Println(d)
//有类型但没有值的变量会被赋zero值zero-valued. int类型的零值是0.
var e int
fmt.Println(e)
//:=语言是声明和初始化变量的简写, 例如
//与:var f string = “short” 等价
f := “short”
fmt.Println(f)
}
$ go run variables.go
initial
1 2
true
0
short
Constants:常量
Go支持的常量有character, string, boolean, 和numeric 类型.
代码如下:
package main
import “fmt”
import “math”
//常量用const声明
const s string = “constant”
func main() {
fmt.Println(s)
//const声明可以像var一样在任何地方使用
const n = 500000000
//常量可以表示任意精度
const d = 3e20 / n
fmt.Println(d)
//数字常量没有类型直到被赋与,如通过下面的显示指定
fmt.Println(int64(d))
//数字可以在上下文指定需要的类型,例如math.Sin需要一个float64的类型
fmt.Println(math.Sin(n))
}
$ go run constant.go
constant
6e+11
600000000000
-0.28470407323754404
For:循环
for是Go语言中唯一的循环结构,
下面是基本的三类循环类型。
代码如下:
package main
import “fmt”
func main() {
//最基本的类型,一个单一的循环
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
//一个精典的类型:带初始化/条件的循环
for j := 7; j <= 9; j++ {
fmt.Println(j)
}
//通过条件的for循环会一直执行,直到你中断或在闭包中返回。
for {
fmt.Println(“loop”)
break
}
}
$ go run for.go
1
2
3
7
8
9
loop
在range语法中我们还会看到另外一种for的用法。
If/Else:条件语句
Go通过if和else来实现条件分支
代码如下:
package main
import “fmt”
func main() {
//一个基本用法
if 7%2 == 0 {
fmt.Println(“7 is even”)
} else {
fmt.Println(“7 is odd”)
}
//只有if的情况
if 8%4 == 0 {
fmt.Println(“8 is divisible by 4”)
}
//你可以在条件中声明变量;任何声明可以在所有的条件代码段中使用
if num := 9; num < 0 {
fmt.Println(num, “is negative”)
} else if num < 10 {
fmt.Println(num, “has 1 digit”)
} else {
fmt.Println(num, “has multiple digits”)
}
}
Go语言中没有三目(ternary if)运算符,你需要用if来实现
代码如下:
$ go run if-else.go
7 is odd
8 is divisible by 4
9 has 1 digit
Switch:条件枚举
Switch语法可以实现多种条件分支。
代码如下:
package main
import “fmt”
import “time”
func main() {
//这里是一个基础的Switch
i := 2
fmt.Print(“write ”, i, “ as ”)
switch i {
case 1:
fmt.Println(“one”)
case 2:
fmt.Println(“two”)
case 3:
fmt.Println(“three”)
}
//你可以使用多种条件匹配,同样你可以使用默认匹配
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println(“it‘s the weekend”)
default:
fmt.Println(“it‘s a weekday”)
}
//无条件的switch可以实现if/else类型的效果
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println(“it‘s before noon”)
default:
fmt.Println(“it‘s after noon”)
}
}
$ go run switch.go
write 2 as two
it‘s the weekend
it‘s before noon
★ 英文基本语法
★ 英语句子基本语法
★ 语文语法
★ 语法讲义
★ 虚拟语气语法