lua语法介绍(二)
一.语法简要
在学习任何语法之前,我们都需要知道该门语言是怎样定义的,是怎样运行的,话说白了,就是到了人家的山头得唱人家山头的歌。下面介绍lua的语法
1.变量的定义
特点:
1.变量在使用前必须声明,给一个变量赋值后即创建了这个变量
2.删除一个变量只需将其变量赋值为nil 即可
3.访问一个没有被初始化的变量不会出错,得到的结果是nil
--- 全局变量
a = --- 局部变量 local b = 20 --- 应尽可能的使用局部变量,它有2个好处
-- 1.避免命名冲突
-- 2.访问局部变量的速度比全局变量更快
2.数据类型的定义
--- nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
b = nil
print(b) --- boolean 包含两个值:false和true。
flag = false;
print(flag) --- number 表示双精度类型的实浮点数
num = 10.0;
print(num) --- string字符串由一对双引号或单引号来表示
str = "hello world";
print(str)
--- 用#号来表示字符串的长度
print("字符串长度" ..#str); --- 字符串和数字进行算术操作
print("" + ); --- 字符串之间进行连接
print("" .. "");
3.table 的定义
table在lua中是一个关联数组,什么意思呢?其实是在这个数组中设置的有key和value,如果你没设置key,那么key是自增的。
key的类型可以有:数字,字符串或者是表
value是你要存入的值
--- 1. 创建1个空的table
local tab1 = {};
print(tab1); --- 2.直接初始化表
local tab2 = { "java", "scala", "ruby", "lua" }; --- 3.遍历tab
for key, val in pairs(tab2) do
print(key, val);
end ======= 打印结果
1 java
2 scala
3 ruby
4 lua
4.语法
1.if 判断语句
--- Lua if 判断语句
-- if 语句
-- if ... else 语句
-- if 嵌套语句 a = ;
if a == then
print("if 语句 a 的值为:",a)
end
if a < then
print("a 小于10 的值为:",a)
else
print("a 大于10 的值为:",a)
end
if a > then
if a < then
print("a的值是大于5 小于10")
end
else
if a < then
print("a的值是大于5 小于8")
end
end
2.循环语句
--- Lua 循环
-- while 循环
-- for 循环
-- repeat..until
-- 循环嵌套循环 while(true) do
print("while 的循环语句")
end for i = , do
print("i 的值为:",i)
end a = ;
repeat
print("a 的值为:",a)
a = a + ;
until(a > )
--- 注意循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次,
--- 如果条件判断语句(condition)为 false,循环会重新开始执行,直到条件判断语句(condition)为 true 才会停止执行 for i= , do
for j = , do
print(i,j)
end
end
5.函数
lua中的函数有 2种用途:
1.完成指定任务。这种情况下函数作为调用语句使用
2.计算并返回值。这种情况函数作为赋值语句的表达式使用
-- 例:完成指定的功能
function max(num1,num2)
if(num1 > num2) then
result = num1
else
result = num2;
end
return result;
end print("两个数中的最大值是:",max(,)); -- 例:将返回值返回
myParameter = function(param)
print("这是打印函数:",param)
end function add(num1,num2,fun)
result = num1 + num2;
fun(result);
end print("函数传参调用 ======================================")
myParameter();
add(,,myParameter); --- 调用add函数,第1、2个参数为数字,第三个为函数,先将add函数中传入的第1、2个参数计算的结果传入到第3个函数中,作为参数调用第3个参数函数
6.函数的多返回值情况和参数中可变参数情况
-- 函数的多返回值
function maxValueAndIndex(tab)
local maxIndex = ; -- 最大值索引
local maxValue = tab[maxIndex] -- 最大值
for i,val in pairs(tab) do
if val > maxValue then
maxIndex = i;
maxValue = val;
end
end
return maxIndex,maxValue;
end
tab={,,,,}
print(maxValueAndIndex(tab)); -- 3 10 --- 可变参数 function add(...)
local s = ;
for i,v in pairs{...}do
s = s + v;
end
return s
end print(add(,,,,)); -- 求可变参数中参数的个数
function average1(...)
result =
local arg = {...}
for i, v in ipairs(arg) do
result = result + v
end
print("传入的参数个数是:"..#arg);
return result/#arg
end
print("平均值是:",average1(,,,,)) -- 也可以通过"select#" 来获取可变参数的个数
function average2(...)
result =
local arg = {...}
for i, v in ipairs(arg) do
result = result + v
end
print("传入的参数个数是:"..select("#",...)); return result/select("#",...)
end
print("平均值是:",average2(,,,,,));
二.数学运算符
1.算术运算符
local a = ;
local b = ;
print("=========== 数学运算符 ===================")
print("a + b =",a + b );
print("a - b =",a - b );
print("a * b =",a * b );
print("a / b =",a / b );
print("a % b =",a % b );
print("a ^ b =",a ^ b );
print("- b =",-b ); if (a > b)then
print("a 的值大于b")
else if(a == b)then
print("a 的值 == b")
else if a< b then
print("a 的值小于b")
else if( a~= b)then
print("a 的值不等于b")
end
end
end
end
2.逻辑运算符
local a = true;
local b = false;
--- lua 逻辑运算符 and or not
--- a and b result
-- true and true true
-- true and false false
-- false and true false
-- false and false false --if a then
-- return print(false and false);
--end print("====== or ===========");
--- a or b result
--- true or true true
--- false or true true
--- true or false true
--- false or false false
--
--if true then
-- return print(false or false)
--end print("====== not ==========="); --if true then
-- return print("false not:",not false)
--end
3.其它操作符
--- lua 其它操作符
-- .. 连接2个字符串
-- # 一元运算符,返回字符串的长度或表的长度
a = "hello"
b = "world" print("连接2个字符串:",a..b);
print("字符串b的长度是:",#b);
lua语法介绍(二)的更多相关文章
- Lua函数之二
Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...
- 转:OpenResty最佳实践(推荐了解lua语法)
看点: 1. Lua 语法的说明, 排版清晰易懂. 转: https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/m ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(六)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(六) Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStrin ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(四)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(四) 2.1.2 可以使用的内置分词 简单的分词方式并不能满足需求.前文说过Lucene.Net内置分词中StandardAnalyze ...
- Lua语法要点
本文在我的独立博客中的链接:https://www.bughui.com/2017/04/01/lua-grammar-points/ 这篇文章其实是我在四月一号发布的,由于我重新注册了一个博客园帐号 ...
- flex弹性布局语法介绍及使用
一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...
- Spring Boot 配置_yaml语法介绍 day02
一.Spring Boot 的全局配置文件(application.properties.application.yml) 1.这两种配置文件是SpringBoot 支持的对默认配置修改的格式.命名和 ...
- freemarker语法介绍及其入门教程实例
# freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>#### 1.文本,直接输 ...
随机推荐
- sublime text 3 3126注册码
—– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...
- BigDecimal 3个toString()方法区别
BigDecimal 的toEngineeringString.toPlainString和toString方法的区别: toEngineeringString:有必要时使用工程计数法.工程记数法是一 ...
- xhEditor实现ctrl+v粘贴word图片并上传
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- ActiveMQ C#实例
重点参考:NMS Documentation 一.ActiveMQ Queue 在ActiveMQ中Queue是一种点对点的消息分发方式,生产者在队列中添加一条消息,然后消费者消费一条消息,这条消息保 ...
- 牛客练习赛55 E-树 树形DP
题意 你有一颗大小为\(n\)的树,点从\(1\)到\(n\)标号. 设\(dis(x,y)\)表示\(x\)到\(y\)的距离. 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}di ...
- 实战 Prometheus 搭建监控系统
实战 Prometheus 搭建监控系统 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于 ...
- 【转】java 解析多层json
java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso ...
- 第二章、URL与资源
1 URL统一资源定位符 URL 是浏览器寻找信息时所需的资源位置.通过 URL,人类和应用程序才能找到.使用并共享因特网上大量的数据资源.URL是作为URI的一个子集,URI是一类更通用的资源标识符 ...
- 走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
转载自:码农翻身 转自: 刘欣 码农翻身 1周前 我是Servlet, 由于很多框架把我深深地隐藏了起来,我变得似乎无关紧要了,很多人也选择性的把我给遗忘了. 其实,我还活得好好的呢, 只不过是从前台 ...
- 网络文件共享服务—vsftpd服务
文件传输协议(FTP) 文件传输协议:File Transfer Protocol是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层. 服务器端:vsftpd ...