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.文本,直接输 ...
随机推荐
- MySQL 中索引的长度的限制
单列索引的长度的限制 (5.6里面默认不能超过767bytes,5.7不超过3072bytes): 起因是256×3-1=767.这个3是字符最大占用空间(utf8).但是在5.5以后,开始支持4个字 ...
- ueditor粘贴从word中copy的图片和文字 图片无法显示的问题
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- [Luogu] 可持久化线段树 1(主席树)
https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include ...
- 【线性代数】6-6:相似矩阵(Similar Matrices)
title: [线性代数]6-6:相似矩阵(Similar Matrices) categories: Mathematic Linear Algebra keywords: Similar Matr ...
- mac charles 代理https
1.安装根证书:help - ssl proxying - install charles root certificate 2.这时候会弹出一个根证书界面,如果没有弹出,则可以去chrome,高级设 ...
- 安装fastFDS
fastdfs源码包.libfastcommon源码包.nginx模块,我存放源码包于 /usr/local/src wget https://github.com/happyfish100/fast ...
- React前端开发环境搭建
先,我们需要明确的是React和很多前端框架一样,底层都还是js以及html,即便它有着看似特殊的jsx语法. 我们要在服务端运行js,就需要依赖一个环境,和运行war包需要tomcat一类中间件一样 ...
- combobox的js添加数据
$("#int_cls").combobox({ valueField:'code', textField:'name', disabled:false }); var data, ...
- POI的XWPFTableCell的方法
1. XWPFParagraph addParagraph() 在这个表格单元格中添加一个段落 2. void addParagraph(XWPFParagraph p) 给这个表格加一段 3. ja ...
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...