- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Lua语言新手简单入门教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、前言 。
Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.
Lua 可以应用在游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件、安全系统等场景.
笔者学习的目的主要是为了能在 Web 应用(Nginx、Redis)中使用到 Lua 脚本.
特点 。
特性 。
2、安装 。
注意:请确保安装 Lua 之前系统已安装 readline 和 readline-devel。如果没有则键入 yum install -y readline readline-devel 进行安装.
1
2
3
4
|
curl -R -O http:
//www
.lua.org
/ftp/lua-5
.3.4.
tar
.gz
tar
zxf lua-5.3.4.
tar
.gz
cd
lua-5.3.4
make
linux
test
|
测试,命令行中键入 lua -v:
1
|
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
|
显示 Lua 版本说明安装正确.
3、运行方式 。
与其他脚本语言一样,我们需要将 Lua 代码编写在文件中,后缀名为 .lua.
运行该文件的代码时,只需在命令行键入 lua xx.lua 即可.
4、语法 。
4.1 数据类型 。
Lua 中包含 8 种基本数据类型,即:nil、boolean、number、string、userdata、function、thread 和 table.
。
数据类型 | 说明 |
---|---|
nil | 表示无效值,在条件表达式中表示 false。 |
boolean | 布尔值,包含 true 和 false 两个值。 |
number | 表示双精度类型的实浮点数。 |
string | 表示字符串,通过双引号或单引号括住。 |
userdata | 表示任意存储在变量中的 C 数据结构 |
function | 表示 C 或 Lua 编写的函数 |
thread | 表示执行的独立线程,用于执行协同程序。 |
table | 表示一个关联数组,数组索引可以是数字或字符串。 |
。
例如:
1
2
|
a=10
str="hello world"
|
不需要声明变量类型,我们可以通过 type() 判断变量类型.
注意:
Lua 变量有三种类型:全局变量、局部变量和表中的域; 。
默认情况下,不管在哪声明的变量都是全局变量。通过 local 修饰的变量为局部变量; 。
变量默认值为 nil.
4.2 运算符 。
1) 赋值运算符 。
1
2
3
|
str=
"hello"
..
"world"
-- 通过 .. 连接字符串
a,b=10,15 -- a=10,b=15
c,d,e=1,2 -- c=1,b=2,e=nil
|
2) 算术运算符 。
与其他程序设计语言类似.
1
2
3
4
5
6
7
8
|
a,b=10,15
c=a+b -- 加号
d=a-b -- 减号
e=a*b -- 乘号
f=a/b -- 除号
g=a%b -- 求余
h=a^2 -- 求乘方
i=-a -- 负号
|
3) 关系运算符 。
与其他程序设计语言类似.
1
2
3
4
5
|
a,b=10,15
print(a>b) -- 大于
print(a<b) -- 小于
print(a==b) -- 等于
print(a~=b) -- 不等于
|
4) 逻辑运算符 。
1
2
3
|
print(
true
and
false
) -- 与
print(
true
or
false
) -- 或
print(not
true
) -- 非
|
5) 其他运算符 。
。
操作符 | 说明 |
---|---|
.. | 连接两个字符串 |
# | 返回字符串或表的长度,如 #“lua” |
。
4.3 流程控制 。
1) 条件判断,有 3 种写法.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
--
if
语句
if
(
true
)
then
print(
"hello"
)
end
--
if
..
else
语句
a,b=10,15
if
(a>b)
then
print(a)
else
print(b)
end
--
if
嵌套
c=20
if
(c>10)
then
if
(c<30)
then
print(c)
end
end
|
2) 循环,有 4 种写法.
。
类型 | 说明 |
---|---|
while 循环 | 在条件为 true 时,让程序重复执行语句。 |
for 循环 | 重复执行指定语句,重复次数在 for 中控制。可以遍历数字和泛型。 |
repeat .. until | 重复执行循环,直到指定条件为真为止。 |
循环嵌套 | 循环内嵌套多个循环语句。 |
。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
--
while
循环
a=10
while
(a>0)
do
print(a)
a=a-1
end
--
for
循环,遍历数字
for
a=1,10,1
do
print(a)
end
-- repeat .. until 循环
a=10
repeat
print(a)
a=a-1
until(a<1)
|
4.4 数组 。
Lua 数组大小不固定且下标从 1 开始.
1
2
3
4
5
6
7
8
9
|
arr={
"h"
,
"e"
,
"l"
,
"l"
,
"o"
}
-- 此处使用遍历数字方式
for
index=1,#arr
do
print(arr[index])
end
-- 此处使用遍历泛型方式
for
i,v in ipairs(arr)
do
print(i,v)
end
|
4.5 函数 。
1
2
3
4
5
6
7
8
9
10
11
12
|
-- 案例 1
function calc(a,b,c)
return
a+b+c
end
result=calc(1,2,3)
print(result)
-- 案例 2
function getCalc(a,b,c)
return
a,b,c
end
r1,r2,r3=getCalc(1,2,3)
print(r1,r2,r3)
|
Lua 中的函数允许返回多个值.
4.6 table 。
table 是 Lua 中的一个数据结构,类似于 Java 中的 Map 类型或 Javascript 中的 JSON 对象.
Lua table 使用关联数组,我们可以使用任意类型值作为数组的索引,但不能是 nil.
Lua table 大小不固定.
1
2
3
4
5
6
|
person={}
person.name=
"jack"
person.age=20
print(person[1])
print(person.name)
print(person[
"age"
])
|
4.7 模块和包 。
模块类似于一个封装库。从 Lua 5.1 开始,Lua 加入标准的模块管理机制,可以将一些公用的代码放在一个文件中,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合.
Lua 的模块由变量、函数等已知元素组成的 table .
例如:
创建名为 module.lua 的文件.
1
2
3
4
5
|
module={}
module.index=1
function module.sum(a,b)
return
a+b
end
|
另一个文件引入:
1
2
3
4
5
|
-- 此处 module 是文件名
require
"module"
-- 此处 module 是引入模块中定义的名称
print(module.index)
print(module.sum(1,2))
|
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.
原文链接:https://www.extlight.com/2018/02/21/Lua-简单入门/ 。
最后此篇关于Lua语言新手简单入门教程的文章就讲到这里了,如果你想了解更多关于Lua语言新手简单入门教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是 Xcode 4.4 和 AppleScriptObjC 世界的新手。我正在尝试扩展和试验 Sanderson 和 Rosenthal 所著的“学习 AppleScript”一书中关于 Apple
我完全迷失在 shell 编程中,主要是因为我使用的每个站点都提供不同的工具来进行模式匹配。所以我的问题是使用什么工具在管道流中进行简单的模式匹配。 上下文:我有named.conf 文件,我需要一个
我对 C 很陌生,我一直在尝试用这种数据结构制作一个程序: struct node { char command[100]; char prereq[100][80]; cha
该程序检查用户输入的数字是否为素数。 我的问题在if语句中。由于某些原因,Boolean永远不会切换。如果数字为质数,则只会给出两个结果。 我想念什么? import java.util.Scanne
我只是在学习 Haskell。我认为这会产生一个阶乘函数...... (在 ghci 内) Prelude> let ft 0 = 1 Prelude> let ft n = n * ft (n -
这个问题已经有答案了: Using bitwise OR 0 to floor a number (7 个回答) 已关闭 6 年前。 我试图在 JavaScript 中使用二分搜索来查找数组元素,并且
使用 Signal R,如果尝试发送对象,传递模型的语法是什么? private async void FormLoaded(object sender, RoutedEventArgs e) {
我需要使用 Javascript 生成一个半金字塔数字系列,其中包含输入的起始数字和 html 页面中的行数,并在 html 页面中显示结果。我已经完成了 Java 脚本编写之类的工作。我不明白的是它
为什么函数名重复 示例: lucky :: (Integral a) => a -> String lucky 7 = "LUCKY NUMBER SEVEN!" lucky x = "Sorry
我花了2天的时间在GGTS中使用grails进行Web开发。我正在跟着一本书。本书使用命令行。到目前为止,这很棒,但是现在这本书正在使用webtest。我已经在命令行上安装了webtest,但是如何在
我正在学习 Clojure,到目前为止我无法理解这个小难题,我确信这是非常基本的。 我有这个文件: (ns cloapp.core (:gen-class)) (defn -main "I d
我在获取图像以显示在我的 J Frame 中时遇到问题。我确信我将文件放在正确的位置并且输入了正确的名称。这是代码 import java.awt.Color; import java.awt.Gra
我正在尝试为我正在做的应用程序创建一个登录窗口。我整天都在寻找一个例子,但我似乎找不到任何有帮助的东西。我的基本结构如下: // App.scala object App extends Simple
坦率地说,我是 Java 新手。我正在开发一个项目,我想找到一种基于数字序列创建多项式函数的方法。 无论如何,我的问题是我创建了一个存储序列的数组。我现在想找出元素之间的差异。例如。我想找到这个计算a
现在添加了 xml 和 logcat,现在自定义 View 代码,不幸的是我远离开发计算机所以我无法检查你的建议,@jems,我的自定义 View 的构造函数可能错误?@Falmarri,我认为构建目
我在这里缺少什么?当我单击“h2 a”链接时,.content ol 应该切换。我不明白为什么它不起作用:( $(document).ready(function(){ $(".content ol
我是 Java 新手,我到处寻找,但我没有得到一个简单的概念。 我将两个变量声明为 int。我希望这两个变量对于所有方法都是全局的。在我的第一个方法中,我想从用户输入中获取第一个变量的值。然后我希望第
我正在抓取 IMDB 页面的数据,但当尝试将其写入 CSV 文件时,我只从结果中获取最后一行。 代码下方: from urllib.request import urlopen as uReq fro
自从我学习 C 语言以来,我决定制作一个简单的程序,用于加、减和计算两个变量的乘积。根据用户的输入是1,2还是3来选择加/减/折叠。 #include int main (void) { in
int main(void) { string n = GetString(); if(n!=NULL){ for(int i=0, j=strlen(n); i
我是一名优秀的程序员,十分优秀!