一.语法简要  

  在学习任何语法之前,我们都需要知道该门语言是怎样定义的,是怎样运行的,话说白了,就是到了人家的山头得唱人家山头的歌。下面介绍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语法介绍(二)的更多相关文章

  1. Lua函数之二

    Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...

  2. 转:OpenResty最佳实践(推荐了解lua语法)

    看点: 1. Lua 语法的说明, 排版清晰易懂. 转: https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/m ...

  3. Lucene.Net 2.3.1开发介绍 —— 二、分词(六)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(六) Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStrin ...

  4. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...

  5. Lucene.Net 2.3.1开发介绍 —— 二、分词(四)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(四) 2.1.2 可以使用的内置分词 简单的分词方式并不能满足需求.前文说过Lucene.Net内置分词中StandardAnalyze ...

  6. Lua语法要点

    本文在我的独立博客中的链接:https://www.bughui.com/2017/04/01/lua-grammar-points/ 这篇文章其实是我在四月一号发布的,由于我重新注册了一个博客园帐号 ...

  7. flex弹性布局语法介绍及使用

    一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...

  8. Spring Boot 配置_yaml语法介绍 day02

    一.Spring Boot 的全局配置文件(application.properties.application.yml) 1.这两种配置文件是SpringBoot 支持的对默认配置修改的格式.命名和 ...

  9. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

随机推荐

  1. Greenplum 的发展历史

    一.Greenplum的发展历史 Greenplum的发展可以分为下面6个阶段:   图 1 Greenplum时间线 Postgres关系型数据库.Postgres是UC Berkeley开发的关系 ...

  2. GO111MODULE的设置(及GOPROXY)

    环境:win7  go1.13.1 早听说GO111MODULE大名,今天才测试成功,步骤如下: 因为我的Go version >= 1.13,直接用go env -w 设置(注意大小写) go ...

  3. 使用Ajax向SpringMVC传递Json数据

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.保证SpringMVC配置成功了. 2.在pom.xml中追加Jackson相关的依赖 <dependency> <gro ...

  4. Ubuntu start:未知任务:mysql

    在Ubuntu环境下,下载安装mysql但是到最后启动的时候却显示这一句话: start :未知任务:mysql 很纳闷,明明按照教程一步一步写的.后来才想起来,万能的方法,在前面加权限 sudo s ...

  5. Spring Cloud Eureka(七):DiscoveryClient 源码分析

    1.本节概要 上一节文章主要介绍了Eureka Client 的服务注册的流程,没有对服务治理进行介绍,本文目的就是从源码角度来学习服务实例的治理机制,主要包括以下内容: 服务注册(register) ...

  6. <cmath>库函数

    C++ cmath库中的函数 今天模拟,想调用<cmath>中的函数,然鹅...突然忘了,所以还是总结一下吧 写法 作用 int abs(int i) 返回整型参数i的绝对值 double ...

  7. mysql数据库的还原及常见问题解决

    例如:需要还原的数据库脚本文件为test.sql,脚本中已包含数据库的创建,test.sql所在目录为/home 1.常用source命令 进入mysql数据库控制台,如mysql -uroot -p ...

  8. fastjson序列化和反序列化报com.alibaba.fastjson.JSONException: autoType is not support异常问题,解决方案整合

    1.问题起因 2017年3月15日,fastjson官方发布安全升级公告,该公告介绍fastjson在1.2.24及之前的版本存在代码执行漏洞,当恶意攻击者提交一个精心构造的序列化数据到服务端时,由于 ...

  9. Razor字符串处理

    需要注意的是低版本是不支持C# 6语法中的string interpolation的 <label> @if (!string.IsNullOrEmpty(Model.BudgetValu ...

  10. tocke - 加密

    //获取32位随机字符串 $randTocke = getRandChar($length); //当前脚本运行时间, 单位为十万分之一毫秒 $timestamp = $_SERVER['REQUES ...