一.语法简要  

  在学习任何语法之前,我们都需要知道该门语言是怎样定义的,是怎样运行的,话说白了,就是到了人家的山头得唱人家山头的歌。下面介绍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. 004_linux驱动之_class_create创建一个设备类

    (一)解析:class_create函数和class_destroy函数     创建一个类         和        删除一个类.   (二)class_create函数原型   struc ...

  2. pyecharts v1 版本 学习笔记 散点图

    散点图 基本案例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...

  3. gitlab高可用模式

    高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...

  4. vue中mixin的理解与用法

    vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引 ...

  5. hive安装运行hive报错通解

    参考博文:https://blog.csdn.net/lsxy117/article/details/47703155 大部分问题还是hadoop的配置文件的问题: 修改配置文件hadoop/conf ...

  6. input上传mp3格式文件,预览并且获取时间

    <input type="file" id="file" name="file" class="upfile" o ...

  7. CF1197B

    CF1197B 题意: 出n个柱子,每个柱子一个圆盘,其半径各不相同,每次只能将柱子上只有一个圆盘的移到相邻位置,问能否全部移到一个柱子上. 解法: 思路题. 如果所有盘子都能移动到同一个柱子上,那么 ...

  8. Ubuntu18.04上安装N卡驱动、CUDA、CUDNN三连

    环境:Ubuntu18.04 显卡驱动真的挺方便的,CUDA和CUDNN还是踩了一些坑2333 1.安装显卡驱动 安装ubuntu更新或sudo apt-get update & sudo a ...

  9. 通过sqlserver用户操作远程服务器

    USE masterGORECONFIGURE --先执行一次刷新,处理上次的配置GOEXEC sp_configure 'show advanced options',1 --启用xp_cmdshe ...

  10. TNetHttpClient的用法

    TNetHttpClient的用法 TNetHttpClient是DELPHI XE8新增加的控件. 在之前,我们一般都是使用IDHTTP控件,但在安卓.IOS等非WINDOWS平台,IDHTTP访问 ...