Lua基础(2)

-----------------------------------------------------
--算数运算
  a = 10
  b = -3
  r = a % b --a - floor(a/b) * b,结果与与b的符号相同
  print(r)
  
  a = 10.3
  n = a % 1 --去正实数的小数部分:0.3
  p = a - n --取正实数的整数部分:10
  print(n , p)
  
  
  a = -10.3
  n = a % (-1)  --去负实数的小数部分:-0.3
  p = a - n     --取负实数的整数部分:-10
  print(n , p)
  
  x = math.pi
  print(x - x%0.01) --取精确到小数点两位的结果:3.14(不会进行四舍五入,直接截取)
  
-----------------------------------------------------
--  关系运算 <、>、>=、<=、~=、==
--  对与table/userdata/函数,比较的是引用(是否引用同一个对象),不是内容
arr1 = {}; arr1.x = 10; arr1.y = 10
arr2 = {}; arr2.x = 10; arr2.y = 10
arr3 = arr1
print("arr1 == arr2? " .. tostring((arr1 == arr2))) -- false
print("arr1 == arr2? " .. tostring((arr1 == arr3))) -- true

-- table
print(type(arr1))

-----------------------------------------------------
-- 逻辑运算(and、or、not),and(第一个为假,就返回第一个,否则返回第二个)和or(第一个为真就返回第一个,否则返回第二个)都是短路求值
print(false and "hello")  --false
print(nil or "hello")     --hello
print(false or "hello")   --hello
print(4 or "hello")       --4
print(4 and "hello")      --hello

if ((type(arr1) == "table") and arr1.x == 10) then
	print("arr1 is a table and arr1.x = " .. arr1.x)
end

-----------------------------------------------------
-- x = x or v
default = "default_value"
x_value = x_value or default
print(x_value)

if not x_value then  x_value = default end
print(x_value)

-----------------------------------------------------
--a and b or c (前提是b要为真,and的优先级大于or,类似于a ? b : c),
a = 10
b = 12
max = (a > b) and a or b --等价于max(x,y),如果a和b未定义,会报错的
print(max, ((a > b)))

-----------------------------------------------------
--table
my_table = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
for var=1, #my_table do
	print("my_table[".. var .. "]=" .. my_table[var]) --索引从1开始
end

rev_table = {}
my_table[0]=100
for key, var in pairs(my_table) do
	print("pairs <" .. key .. ", " .. var .. ">")
	rev_table[var] = key
end

--table反转
print("rev_table is",#rev_table) --结果为0,因为#rev_table计算的是以整数为key的entry的个数
for key, var in pairs(rev_table) do
  print("rev_table[".. key .. "]=" .. var) --索引从1开始
end

complex_table = {x=10, y=20}
complex_table.z = my_table; --用table作为value
print(complex_table.z[2])

complex_data = {color="blue", thickness=2.3, points_count=4,
  {x=10,y=3},
  {x=30,y=8},
  {x=20,y=13},
  {x=50,y=6}
}

for key, var in pairs(complex_data) do
  print("complex_data pairs <" .. key .. ", " .. tostring(var) .. ">")
end

for var=1, #complex_data do
  print("complex_data[".. var .. "]=" .. tostring(complex_data[var].x)) --索引从1开始(attempt to concatenate field '?' (a table value))
end

complex_data2 = {
  ["*"] = "mul", ["/"] = "div", ["+"] = "add", ["-"] = "sub"
}
-----------------------------------------------------
--赋值
x = 10; y = 100
x, y = y, x
print(x,y)

complex_data2["+"], complex_data2["-"] = complex_data2["-"], complex_data2["+"]
print(complex_data2["+"], complex_data2["-"])


--作用域
global_var = 10
do
  local global_var = 122  --local
  global_var = 10000      --local
  print("global_var is " .. global_var) --问题,如何访问全局变量?
end

local global_var = global_var;          --创建一个local变量,并且用global变量初始化
print("global_var is " .. global_var)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lua是一种轻量级脚本语言,Redis内置了Lua解释器,可以使用Lua脚本来执行Redis命令,提高Redis的性能和灵活性。下面是Redis Lua基础教程。 1. Redis Lua脚本的结构 Redis Lua脚本的结构以函数为单位,每个函数由三部分组成:输入参数、脚本逻辑和返回值。例如: ``` local key = KEYS[1] local value = ARGV[1] redis.call('SET', key, value) return value ``` 其中,KEYS和ARGV是Redis Lua的两个全局表,用于接收Redis命令的键和值。redis.call()用于执行Redis命令,return语句用于返回脚本执行结果。 2. Redis Lua脚本的执行 Redis Lua脚本执行有两种方式:EVAL和EVALSHA。EVAL用于执行Redis Lua脚本,EVALSHA用于执行缓存在Redis中的Lua脚本。例如: ``` redis> EVAL "return 1 + 1" (integer) 2 redis> EVALSHA "sha1" 1 key1 value1 ``` 其中,sha1是Redis Lua脚本的SHA1校验和,1是输入参数的数量,后面是输入参数的列表。 3. Redis Lua脚本的优势 Redis Lua脚本有以下优势: - 原子性:Redis Lua脚本是原子性的,一个脚本会在执行期间被其他客户端请求阻塞,直到该脚本执行完毕。 - 复用性:Redis Lua脚本可以在多个客户端之间共享,减少了网络传输和脚本解析的开销。 - 安全性:Redis Lua脚本不允许执行除Redis命令之外的任何操作,保障了Redis数据库的安全性。 以上是Redis Lua基础教程,希望能帮助你快速上手Redis Lua脚本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值