首页 > 其他分享 >Lua脚本(三)

Lua脚本(三)

时间:2023-05-23 14:22:59浏览次数:34  
标签:脚本 do end 迭代 Lua 数组 array

Lua 字符串

字符串或串(String)是由数字、字母、下划线组成的一串字符。

Lua 语言中字符串可以使用以下三种方式来表示:

  • 单引号间的一串字符。
  • 双引号间的一串字符。
  • [[]] 间的一串字符。

以上三种方式的字符串实例如下:

string1 = "Lua"
print("\"字符串 1 是\"",string1)
string2 = 'runoob.com'
print("字符串 2 是",string2)

string3 = [["Lua 教程"]]
print("字符串 3 是",string3)

"字符串 1 是"    Lua
字符串 2 是    runoob.com
字符串 3 是    "Lua 教程"

 字符串中有许多的方法,在这里就不一一例举,可参考:https://www.runoob.com/lua/lua-strings.html

 

Lua 数组

数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。

Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。

一维数组

一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for循环出数组中的元素,如下实例:

array = {"Lua", "Tutorial"}

for i= 0, 2 do
   print(array[i])
end

正如你所看到的,我们可以使用整数索引来访问数组元素,如果指定的索引没有值则返回 nil

 

在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

除此外我们还可以以负数为数组索引值:

array = {}

for i= -2, 2 do
   array[i] = i *2
end

for i = -2,2 do
   print(array[i])
end

-4
-2
0
2
4

多维数组

多维数组即数组中包含数组或一维数组的索引键对应一个数组。

以下是一个三行三列的阵列多维数组:

-- 初始化数组
array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

-- 访问数组
for i=1,3 do
   for j=1,3 do
      print(array[i][j])
   end
end

1
2
3
2
4
6
3
6
9

Lua 迭代器

迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。

在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。

泛型 for 迭代器

泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。

泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:

for k, v in pairs(t) do
    print(k, v)
end

上面代码中,k, v为变量列表;pairs(t)为表达式列表。

查看以下实例:

array = {"Google", "Runoob"}

for key,value in ipairs(array)
do
   print(key, value)
end

1  Google
2  Runoob
 

以上实例中我们使用了 Lua 默认提供的迭代函数 ipairs。

下面我们看看泛型 for 的执行过程:

  • 首先,初始化,计算 in 后面表达式的值,表达式应该返回泛型 for 需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用 nil 补足,多出部分会被忽略。
  • 第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于 for 结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
  • 第三,将迭代函数返回的值赋给变量列表。
  • 第四,如果返回的第一个值为nil循环结束,否则执行循环体。
  • 第五,回到第二步再次调用迭代函数

在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。Lua 的迭代器包含以下两种类型:

  • 无状态的迭代器
  • 多状态的迭代器
  • https://www.runoob.com/lua/lua-iterators.html

标签:脚本,do,end,迭代,Lua,数组,array
From: https://www.cnblogs.com/zccjava/p/17415996.html

相关文章

  • Let’s Encrypted:一键申请SSL证书脚本
    wgethttps://raw.githubusercontent.com/nanqinlang-script/acme/master/acme_2.0.shbashacme_2.0.sh使用说明输入你的域名选择要生成证书的类型。输入数字0(生成RSA类型)或1(生成ECC类型)。若未选择则默认生成RSA类型用DNS方式验证域名所有权:添加脚本中显示的绿......
  • (二)shell脚本基础
    shell条件测试read内置命令-p#设置提示信息-t#等待用户输入超时,timeout​[root@shellopt]#read-t15-p"pleaseentername,age:"you_nameyou_agepleaseentername,age:gm18[root@shellopt]#echo$you_name$you_agegm18字符串条件测试test命令test评......
  • 【iOS开发】UIWebView调用JS点击事件(stringByEvaluatingJavaScriptFromString)
    一、场景描述产品需求是移动端app要调用h5页面,然后监听h5代码中的某个方法,最终执行h5中的具体代码。二、具体代码.m文件@interfaceViewController()<UIWebViewDelegate>@property(nonatomic,strong)UIWebView*webView;@end@implementationViewController-(void)viewDid......
  • Openresty 学习笔记(二)Nginx Lua 正则表达式相关API
    ngx.re.match语法: captures,err=ngx.re.match(subject,regex,options?,ctx?,res_table?)环境: init_worker_by_lua*,set_by_lua*,rewrite_by_lua*,access_by_lua*,content_by_lua*,header_filter_by_lua*,body_filter_by_lua*,log_by_lua*,ngx.timer.*,balancer......
  • 1.脚本高级命令,进程优先级命令,进程管理工具,任务相关命令
    一.总结脚本高级命令trap,install,mktemp,expect,进程优先级命令:nice,renice,进程管理工具:ps,pstree,prtstat,pgrep,pidof,uptime,mpstat,top,htop,free,pmap,vmstat,iostat,iotop,iftop,nload,nethogs,iptraf-ng,dstat,glances,cockpit,kill,job,任务......
  • 在java中使用lua脚本操作redis
    前言众所周知,redis可以执行lua脚本,至于为什么要用lua脚本来操作redis,自行百度咯开始Bean类packagecn.daenx.myadmin.common.config.redis;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.......
  • redis-cli 使用lua脚本笔记
    前言众所周知,redis可以执行lua脚本,至于为什么要用lua脚本来操作redis,自行百度咯先来讲一下最简单的方式,关于如何在javaspringboot里用lua脚本,请查看我另一篇文章:https://www.cnblogs.com/daen/p/17418024.html更为详细的资料请参考以下文章https://blog.csdn.net/jiayibingd......
  • 【ambari 2.7】一键docker部署脚本
    仓库地址#首次创建和启动集群容器shapp.shcreate#启动容器shapp.shstart#停止容器shapp.shstop步骤注意点:软件源地址:http://172.188.0.2/HDP/centos8/3.3.1.0-002/http://172.188.0.2/HDP-UTILS/centos7/1.1.0.22/主机名称和server机器的私钥amb-server.......
  • 石家庄铁道大学自动评教脚本
    写(抄)了半个下午,科技是第一生产力!Object.defineProperty(navigator,'userAgent',{value:'Android',writable:false});varnum=document.getElementById("tempGrid").rows.length-1console.log('共'+num+'门课')vari=1;vartim......
  • 使用jQuery加载js脚本
    动态加载Javascript是一项非常强大且有用的技术。这方面的主题在本站已经讨论了不少,我也经常会在一些个人项目上使用RequireJS和Dojo加载js。它们很强大,但有时候也会得不偿失。如果你使用的是jQuery,它里面有一个内置的方法可以用来加载单个js文件。当你需要延迟加载一些js插件或其......