码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Lua--基础入门


    合集 - Redis(18)
    1.Redis--简介及配置文件详解04-242.Redis--常用命令(1)04-243.Redis-Hash型与List型操作命令04-274.Redis--Set、ZSet操作命令和benchmark测试工具04-285.Redis--SDS字符串与集合的底层实现原理04-296.Redis--发布订阅命令和Redis事务05-017.Redis-持久化之RDB05-058.Redis--持久化之AOF05-069.Redis--集群搭建与主从复制原理05-0710.Redis--哨兵机制与CAP定理05-0811.Redis--Redis分布式系统的原理与实操05-1112.Redis--Jedis应用与Spring Boot整合Redis05-1113.Redis--高并发问题:缓存穿透、缓存击穿、缓存雪崩与数据库缓存双写不一致05-11
    14.Lua--基础入门05-12
    15.Lua--table、模块、元表与元方法、面向对象05-1216.Lua--协同线程与文件IO05-1317.Redis--一文搞懂Redis分布式锁05-1318.redis--Redisson的八种锁机制05-13
    收起

    Lua是一个由标准C语言开发的、开源的、可扩展的、轻量级的、弱类型的、解释型脚本语言。

    Linux系统的Lua

    下载并安装

    1. 从官网下载,并上传到Linux,下载地址:Lua: download area
    2. 解压tar -zxvf lua-5.5.0.tar.gz -C /opt/Lua
    3. 安装gcc,如果有可以跳过
    4. 执行编译命令make linux test
    5. 执行安装命令 make install
    6. 验证是否安装成功 lua -v 查看版本号

    两种交互模式

    Lua提供了两种交互模式:命令模式和脚本文件模式。

    命令行模式

    直接再命令行中输入语句,回车就可看到运行结果。

    先使用lua命令进入lua命令行模式,然后输入语句后回车开始运行。

    lua语句后的分号不强制要求,有没有都行。

    无标题

    脚本文件模式

    1. 先创建一个脚本文件hello.lua,编辑内容,
    2. 然后执行lua hello.lua 命令运行脚本

    无标2题

    无标3题

    两种脚本运行模式

    脚本文件的运行方式有两种:lua命令方式和可执行文件方式。

    可执行文件方式就是将lua脚本文件修改为可执行文件运行。

    1. 修改脚本文件内容

      在脚本文件第一行增加#!/usr/bin/lua,表示当前文件使用/usr/bin/lua 命令来运行。

    2. 修改脚本文件权限

      为脚本文件赋予可执行权限 chmod 755 hello.lua

    3. 运行./hello.lua

    windows系统的Lua

    Windows系统的Lua运行环境,最常用的是SciTE。

    SciTE是一款Lua脚本测试编辑器,提供Lua编辑运行环境。除了SciTE还有LuaDist、LuaRocks等。

    下载地址是:Releases · rjpcomputing/luaforwindows

    SciTE有两种运行方式:命令行反射光hi和Lua脚本的编辑运行环境。

    Lua语法

    注释

    Lua的行注释为两个连续的减号。

    段注释以--[[开头,以--]]结尾。

    数据类型

    Lua有以下8种数据类型。通过type()可以查看一个数据的类型,比如type(nil) 的结果为nil

    无标4题

    标识符

    Lua的标识符由字母、数字、下划线组成,不能以数字开头。Lua大小写敏感。

    变量

    Lua是弱类型语言,变量无需声明即可使用。

    变量分为全局变量和局部变量。Lua中的变量默认都是全局变量,即使声明在语句块或函数里。

    局部变量local相当于Java中的private,只能在声明的语句块中使用。

    变量的类型可以随时改变,无需声明。

    运算符

    算术运算符

    假设A=10 ,B=20,其各种运算符的结果如下:

    无标5题

    注意:

    • SciTE 仅支持Lua到5.1版本,而整除运算符// 需要5.3 版本以上,所有当前SciTE 看不到效果
    • 在命令行模式中,直接输入变量名回车,相当于print()函数输出该变量。

    关系运算符

    无标6题

    逻辑运算符

    假如A=true,B=false

    无7标题

    其他运算符

    无8标题

    函数

    Lua中函数以function开头,后跟函数名和参数列表,以end结尾。

    可以没有返回值,也可以一次返回多个值。

    function f(a,b)
    	print (a,b)
    end
    

    固定参函数

    Lua中的函数不要求实参的个数必须与形参的个数相同。

    如果实参个数小于形参个数,剩余的用nil填充。

    如果实参个数大于形参个数,多余的会被系统忽略。

    可变参函数

    函数定义时不给出具体形参的个数,而是使用三个连续的点号。

    函数调用时可以传递任意个数的参数,函数会全部接收。

    function f(...)
    	local a,b,c,d=...
    	print(a,b,c,d) -- 输出前4个参数
        print(...)  -- 输出所有参数
    end
    

    返回多个值

    当函数返回多个值,需要有多个变量来同时接收。

    function f(a,b)
    	local sum=a+b
    	local mul=a*b
    	return sum,mul
    end
    m,n=f(3,5)
    print (m,n) -- 结果为8,15
    

    函数作为参数

    函数作为参数时,可以是已经定义好的普通函数,也可以是匿名函数。

    流程控制语句

    if语句

    Lua提供if...then 用于表示条件判断,if的判断条件可以是任意表达式。

    false与nil为假,true与非nil作为真,即使是0也是真。

    if的判断条件可以使用小括号,也可以不使用。

    if a>0 then
    	print("num > 0")
    else
    	print("num <= 0")
    end
    

    if嵌套语句

    if...then...elseif...then...else...end

    这里的elseif 中间没有空格。

    if a>0 then
    	print("num > 0")
    elseif a==0 then
        print("num = 0")
    else
    	print("num < 0")
    end
    

    循环控制语句

    • while...do :while中的条件成立就一致循环。

    • repeat...until :until中的条件成立,就停止循环。

      repeat
      	print(a)
      	a=a-1
      until a<0
      
    • 数值for:这种for循环只用于循环变量为数值型的情况,语法格式为:

    for var=exp1,exp2,exp3 do
    	循环体
    end
    

    var为循环遍历,exp1为循环初始值,exp2为循环结束值,exp3为循环步长。

    步长不写时,默认为1。

    • 泛型for:用于遍历table中的值,要与Lua的迭代器联合使用。

    • break:提前终止循环。

    • goto:跳转到指定标记语句处开始执行。语句标记使用双冒号括起来,置于语句前面。

      goto语句可以用在循环之外。

      注意:Lua5.1 不支持双冒号的语句标记。

      function f(a)
      	::flag:: print(a)
      	if a>1 then
      		print("hello")
      		a=a-1
      		goto flag
      	end
      end
      

    本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/20020235

  • 相关阅读:
    自学网络安全的三个必经阶段(含路线图)
    RUST运算符重载
    【Try to Hack】Windows系统账户安全
    Vue中Vue router和axios的封装使用。
    快速找到可以用的R包或python包(比如可以对Cox数据进行shap分析的包)
    详解:整合SSM
    自定义Dynamics 365实施和发布业务解决方案 - 6. Azure集成
    全网最全斗音短视频新老账号起号技巧
    关于俄罗斯游戏玩家特征的几个事实
    安科瑞餐饮油烟监测云平台助力大气污染攻坚战
  • 原文地址:https://www.cnblogs.com/alineverstop/p/20020235
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号