一.语法简要  

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

    $("").parent().parent()  //父元素的父元素 $("").parents("tr")  // 祖先元素 找到tr

  2. MultipartFile 类

    本文链接:https://blog.csdn.net/Peter_S/article/details/84951978今天说下 MultipartFile 这个类吧,这两天正在用,也在网上查了查资料, ...

  3. leetcode解题报告(8):Remove Element

    描述 Given an array and a value, remove all instances of that value in place and return the new length ...

  4. leetcode解题报告(6):Remove Duplicates from Sorted List

    描述 Given a sorted linked list, delete all duplicates such that each element appear only once. For ex ...

  5. 牛客练习赛55 E-树 树形DP

    题意 你有一颗大小为\(n\)的树,点从\(1\)到\(n\)标号. 设\(dis⁡(x,y)\)表示\(x\)到\(y\)的距离. 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}di ...

  6. centos 利用iptables来配置linux禁止所有端口登陆和开放指定端口的方法

    1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptabl ...

  7. HDU 4386 Quadrilateral(四边形的海伦公式的应用)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/G 题目大意是给出四条边,问能否组成一个四边形,如果 ...

  8. 数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)

    关键字 row_number() over (partition by)   例如,下面的数据, 这是按照name分组后,展示property值. 我们想得到这样的值; 第一步:将每一组的proper ...

  9. React的Virtual DOM厉害了

    React 的伟大之处就在于,提出了Virtual DOM这种新颖的思路,并且这种思路衍生出了React Native,有可能会统一Web/Native开发. 在性能方面,由于用到了Virtual D ...

  10. Python 学习 —— 进阶篇(装饰器、类的特殊方法)

    Python基础部分学完之后,在进入其OOP部分前,先理解一下其装饰器这种结构,其功能可类比于Java中的面向切面编程,下面参见具体实例: def log(f): def fn(x): print ' ...