openresty开发系列15--lua基础语法4表table和运算符

lua中的表table

一)table (表)
Table 类型实现了一种抽象的"关联数组"。即可用作数组,也可以用作map。
lua中没有数组和map,都是用table这个类型

--数组
java   int[] intArr = new int[]{1,2,3,4,5,6};
intArr[0]
intArr[1]
--map----> key value

HashMap map
map.add(key,value)

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"
mytable[2]= "Lua2"
mytalbe["k1"] = v1;

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

lua类似数组的table ,索引值从1开始,,而不是0
mytable={1,2,3,4,5}
mytalbe[1]

mytable={"a","b","hello","world"}

mytable1 = {key1 = "v1",k2="v2",k3="v3"}

mytable2 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}

print(mytable[1],mytable[2],mytable[3],mytable[4]);
print("------------------")
print(mytable1["key1"],mytable1["k2"],mytable1["k3"]);
print("------------------")
print(mytable2[1],mytable2["key1"],mytable2[2],mytable2["k2"],mytable2[3],mytable2[4]);

talbe   key可以为 number 或字符串,,也可以是其他类型

table 是内存地址 赋值给变量

二)table进行赋值给变量,其实是把内存地址给了变量,变量只是引用了内存地址

local mytable1 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}

local mytable2 =  mytable1

mytable2[1] = "aa"

print(mytable2[1])

print(mytable1[1])

mytable2 = nil  --移除的是引用

print("-------------")
print(mytable1[1])

内存指针--》C++

lua算数运算符

一)算术运算符

+    加法    
-    减法    
*    乘法    
/    除法    
%    取余    
^    乘幂    
-    负号

print(1 + 2)       -->打印 3
print(5 / 10)      -->打印 0.5。 这是Lua不同于c语言的
print(5.0 / 10)    -->打印 0.5。 浮点数相除的结果是浮点数
-- print(10 / 0)   -->注意除数不能为0,计算的结果会出错
print(2 ^ 10)      -->打印 1024。 求2的10次方

local num = 1357
print(num % 2)       -->打印 1
print((num % 2) == 1) -->打印 true。 判断num是否为奇数
print((num % 5) == 0)  -->打印 false。判断num是否能被5整数

二)关系运算符

==    等于,检测两个值是否相等,相等返回 true,否则返回 false    
~=    不等于,检测两个值是否相等,相等返回 false,否则返回 true    不想java !=,,~=
>    大于,如果左边的值大于右边的值,返回 true,否则返回 false    
<    小于,如果左边的值大于右边的值,返回 false,否则返回 true    
>=    大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false    
<=    小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false

print(1 < 2)    -->打印 true
print(1 == 2)   -->打印 false
print(1 ~= 2)   -->打印 true
local a, b = true, false
print(a == b)  -->打印 false

注意:table, userdate 和函数;判断的是引用地址的判断
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
  print("a==b")
else
  print("a~=b")
end

三)逻辑运算符
and    逻辑与操作符。(A and B) 若 A 为 假,则返回 A,否则返回 B
or    逻辑或操作符。(A or B) 若 A 为 真,则返回 A,否则返回 B
not    逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 永远只返回 true 或者 false

local c = nil
local d = 0
local e = 100

print(c and d)  -->打印 nil
print(c and e)  -->打印 nil
print(d and e)  -->打印 100

print(c or d)   -->打印 0
print(c or e)   -->打印 100
print(d or e)   -->打印 0

print(not c)    -->打印 true
print(not d)    -->打印 false

短路取值 原理
and  与,,,if(a and b and c)

a and b and c   a为真,b为真,c为真  返回c
                a为真,b为假,c为真  返回b
                a为假 bc不管bc为什么值  返回a

一路去判断变量值是否为真,一旦遇到某个变量为假,就立刻短路返回 返回值就是 假的变量值

a or b or c     一路判断变量值是否为真,一但遇到某个变量为真,就立刻短路返回,返回值就是 真的变量值
                a为真,bc    返回a

a为假,b为真,不管c是什么值 返回b

四)其他运算符
..    连接两个字符串    a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
#    一元运算符,返回字符串或表的长度。 #"Hello" 返回 5

很多字符串连接 我们如果采用..这个运算符 ,性能是很低

推荐使用 table 和 table.concat() 来进行很多字符串的拼接

五)优先级
^
not   # -
*   /   %
+   -
..
< > <=  >=  ==  ~=
and
or
------------------------
local a, b = 1, 2
local x, y = 3, 4
local i = 10
local res = 0
res = a + i < b/2 + 1  -->等价于res =  (a + i) < ((b/2) + 1)
res = 5 + x^2*8        -->等价于res =  5 + ((x^2) * 8)
res = a < y and y <=x  -->等价于res =  (a < y) and (y <= x)

原文地址:https://www.cnblogs.com/reblue520/p/11429741.html

时间: 2024-10-11 22:33:14

openresty开发系列15--lua基础语法4表table和运算符的相关文章

openresty开发系列16--lua中的控制结构if-else/repeat/for/while

openresty开发系列16--lua中的控制结构if-else/repeat/for/while 一)条件 - 控制结构 if-else if-else 是我们熟知的一种控制结构.Lua 跟其他语言一样,提供了 if-else 的控制结构. 1)单个 if 分支 型 if 条件 then --body end 条件为真 ,执行if中的body ----------------------- x = 10 if x > 0 then print("分支一") end ----

IOS开发系列&mdash;Objective-C之基础概览

概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会继续扩充.今天我们正式开始学习Objective-C,以后简称"ObjC",ObjC是在C语言的基础上加上了一层面向对象的特性,它完全兼容C语言,甚至可以混写C++.它是Mac OS X和IOS的主要开发语言,从IOS发布之后可以说ObjC的地位呈直线上升趋势,当前ObjC已经是仅次于C语

openresty开发系列24--openresty中lua的引入及使用

openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua   --->字符串编写方式  2) xxx_by_lua_block ---->代码块方式  3) xxx_by_lua_file  ---->直接引用一个lua脚本文件 我们案例中使用内容处理阶段,用content_by_lua演示 -----------------编辑nginx.conf----------------------- 第一种:content_by_lua l

CC3.2+Lua(2) ——Lua基础语法1

[唠叨] 首先,我已经默认你已经学过至少一门宿主语言了(C++.Java等),然后转向学习Lua. 因为51cto中对于Lua语言没有代码高亮,为了让代码看起来丰富多彩,我只好用截图了. 本节内容仅介绍Lua的简单基础语法,更多用法请百度:Lua中文教程 . Lua参考手册 . [学习感慨]     > 语句末尾不需要加分号 ;      > 语句块不是用花括号 { } , 而是 do 语句块 end 表示语句块的开始和结束.         而 花括号 {} 表示的为一个 表结构 .    

Lua基础语法讲解

Lua 是什么? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发. 设计目的 其设计目的是

oracle开发系列(五) 取左表不在右表记录的3种方法-引申到db2

引: 我们在做数据库开发用 pl sql 加工数据时,经常会遇到取a表不在b表中的记录 或者 左表不在右表中的记录 的情况,所以特地对此做个简单的总结,以便以后用到回顾. 解决: 取a表某字段不在b表 我们自然的逻辑会想到用 a not in b ,这是第一种方法 1 not in 如下图 ,数据库为不跑业务的测试数据库,两张表的数据量一样, 用not in 可以找出a表中prd_inst_id不在t表中的记录 如下图,为生产库的表  l 和t表数据量相同,数据量900w左右 2 not exs

openresty开发系列13--lua基础语法2常用数据类型介绍

一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假",其它所有值均为"真".比如 0 和空字符串就是"真": local a = truelocal b = 0local c = nil if a then    print("a")        -->output:aelse    print("not a")    --这个没有执行en

iOS开发系列—Objective-C之基础概览oc格式化输出例子

概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会继续扩充.今天我们正式开始学习Objective-C,以后简称"ObjC",ObjC是在C语言的基础上加上了一层面向对象的特性,它完全兼容C语言,甚至可以混写C++.它是Mac OS X和IOS的主要开发语言,从IOS发布之后可以说ObjC的地位呈直线上升趋势,当前ObjC已经是仅次于C语

iOS开发系列—Objective-C之基础概览(转载)

本文转载于:崔江涛(KenshinCui)http://www.cnblogs.com/kenshincui/p/3861300.html 概览 今天我们正式开始学习Objective-C,以后简称“ObjC”,ObjC是在C语言的基础上加上了一层面向对象的特性,它完全兼容C语言,甚至可以混写C++.它是Mac OS X和IOS的主要开发语言,从IOS发布之后可以说ObjC的地位呈直线上升趋势,当前ObjC已经是仅次于C语言.Java的第三大编程语言. 第一个ObjC程序 基本数据类型 第一个O