【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%

news2024/12/1 0:40:56

2 初级阶段 —— 基础语法和数据类型

文章目录

  • 2 初级阶段 —— 基础语法和数据类型
    • 2.0 关键字(keywords) 🔥
    • 2.1 注释与标识符
      • 2.1.1 注释
      • 2.1.2 标识符
    • 2.2 变量与赋值
      • 2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外
      • 2.2.2 local变量是局部变量, 以end作为边界
      • 2.2.3 多个变量同时赋值且变量没有类型, 只是一个引用
      • 2.2.4 用全局变量给局部变量赋值
    • 2.3 数据类型:数字、字符串、布尔值
      • 2.3.1 数值类型
      • 2.3.2 字符串 —— `#`获取长度/`..`连接符 🔥
      • 2.3.3 只有nil和boolean的false会使条件表达式为假, 0或""都会判为真
    • 2.4 运算符和表达式
      • 2.4.0 算数运算符
      • 2.4.1 逻辑运算符`and`/`or`/`not`
      • 2.4.2 比较运算符 `~=`/`>=`/...
      • 2.4.2 特殊的表达式
    • 往期回顾

在这里插入图片描述

2.0 关键字(keywords) 🔥

The following keywords are reserved and cannot be used as names:

andbreakdoelseelseifendfalse
forfunctionifinlocalnilnot
orrepeatreturnthentrueuntilwhile

Lua 与 C++对比:

  1. do end <==> { }
  2. 除非声明为local, 否则不以do end区分生命周期, 默认都是全局变量,
  3. 只有nil和boolean类型的false会使条件表达式为假, 0或""都会判为真
  4. 语法糖: lhs and rhs ==> 如果lhs为真, 返回rhs; 如果lhs为假, 返回lhs, 同理, or 和 not

2.1 注释与标识符

2.1.1 注释

在 Lua 中,注释用于对代码进行解释说明,而不会被实际执行。Lua 支持两种注释形式:

  • 单行注释:使用两个连字符 -- 开头,后面跟着注释内容。
  • 多行注释:使用两个连续的方括号 --[[ 开头,以及两个连续的方括号 --]] 结尾,之间是注释内容。
-- 这是单行注释

--[[
这是
多行
注释
--]]

2.1.2 标识符

在 Lua 中,标识符用于命名变量、函数和其他数据。标识符的命名规则如下:

  • 以字母(大小写均可)或下划线 _ 开头,后面可以跟字母、数字和下划线。
  • Lua 是区分大小写的,因此 myVarmyvar 是不同的标识符。

2.2 变量与赋值

2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外

print(peichen) -- nil
do  
    peichen = "myself" -- 所有变量默认是全局变量  
end  
print(peichen) -- myself

except:

for i = 1, 5 do -- 这个i为局部变量  
    print(i)  
end  
print(i) -- nil

2.2.2 local变量是局部变量, 以end作为边界

print(peichen) -- nil
do  
    local peichen = "myself" -- local变量是局部变量
end  
print(peichen) -- nil

2.2.3 多个变量同时赋值且变量没有类型, 只是一个引用

local x, y = 10, 20
x, y = y, x -- 先取值, 再赋值, 效率不高, 但是写法简单, 不需手动引入第三个变量
print(x, y) -- 20      10

x = "a"  
y = "b"  
print(x, y) -- a   b

a = 1,2,3  
print(a)  -- 1
a,b = 1,2,3  
print(a, b)  -- 1     2
a,b,c = 1,2,3  
print(a, b, c) -- 1    2    3

2.2.4 用全局变量给局部变量赋值

print(peichen) -- nil
peichen = "good!"  
do  
    local peichen = peichen -- 用全局变量给局部变量赋值 
    peichen = "boy!"  
    print(peichen) -- boy!
end  
print(peichen) -- good!

2.3 数据类型:数字、字符串、布尔值

2.3.1 数值类型

不区分整形(32bit)和浮点型, 认为全部都是浮点型即可(64bit); 可以完全当成计算器来用

print(type(123)) -- number
print(type(3.14)) -- number
print(type(2.99e10)) -- number

print(1/2) -- 0.5
print(2^0.5) -- 1.4142135623731
print(12345 == 1.2345e4) -- true

2.3.2 字符串 —— #获取长度/..连接符 🔥

单引号/双引号都可以, 根据内容自由选择

Ref. [[1000.03.CS.PL-Lua-Lua字符串的实现及其编码实践]]

print("I am so cool!")  
print("\"I am so cool!\"she said") -- "I am so cool!"she said  
print('"I am so cool!"she said') -- "I am so cool!"she said

-- [[ 后跟换行, 会保留到内容中  
ctx = [[  
"I'm so cool!"she said]]  
print(ctx) -- "I'm so cool!"she said

-- 可以自定义界定符, 任意数量=号都可以, 比如包含65535(高版本更多)以内的html  
ctx = [===["I'm so cool!"she said]===]  
print(ctx) -- "I'm so cool!"she said 
print(#ctx) -- 22
print(ctx.." with smiles.") -- "I'm so cool!"she said with smiles.

2.3.3 只有nil和boolean的false会使条件表达式为假, 0或""都会判为真

-- 只有`nil`和boolean type中的`false`会使条件表达式为假, 0或""都会判为真  
print(type(nil)) -- nil 
print(type(true)) -- boolean

2.4 运算符和表达式

2.4.0 算数运算符

Lua 支持常见的算术运算符,如 +-*/ 等。

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取模(求余数)
  • ^:幂运算

2.4.1 逻辑运算符and/or/not

-- 语法糖: lhs and rhs ==> 如果lhs为真, 返回rhs; 如果lhs为假, 返回lhs
print(0 and 123) -- 123  
print(nil and 123) -- nil  
print(false and 123) -- false  
  
-- 语法糖: lhs or rhs ==> 如果lhs为真, 返回lhs; 如果lhs为假, 返回rhs
print(0 or 123) -- 0  
print(nil or 123) -- 123  
print(false or 123) -- 123

print(false or nil) -- nil  
print(not nil) -- true  
print(not 0) -- false

2.4.2 比较运算符 ~=/>=/…

2.4.2 特殊的表达式

初始化:

-- x = x1 or {xx} x1存在, x为x1;否则为{}
a = a1 or 0

三目运算符A?B:C:

-- 已知B为真, A真 -> A and B -> B, B or C -> B; A假 -> A and B -> A, B or C -> C

往期回顾

【CS.PL】Lua 编程之道: 简介与环境设置 - 进度8%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络编程】地址族与数据序列

IP是Internet Protocol简写&#xff0c;是为了收发网络数据而分配给计算机的值&#xff0c;端口号是为区分程序中创建的套接字而分配给套接字的序号。 网络地址分为两类&#xff1a;IPv4(4个字节地址族)&#xff0c;IPv6(6个字节地址族) 网络地址初始化&#xff0c;主要针对服…

俄语演讲开场白,柯桥外贸俄语培训

1、&#xff08;Разрешите мне&#xff09;от имени... 请允许我代表... 例&#xff1a; Разрешите мне от имени нашей компании поприветствовать всех членов вашей делегации…

QField测量功能

QField提供开箱即用的测量功能&#xff0c;可以灵活更改工程中测量距离和面积的单位。您可以在 "常规" 部分导航到 "工程" 菜单&#xff0c;并选择 "工程属性..." 完成此操作。 要启用测量工具&#xff0c;请打开主菜单并选择 测量工具 。 启…

ABAP调用JavaScript进行幂乘运算

ECC版本没有内置的ipow运算函数&#xff0c;所以需要进行幂乘运算的话&#xff0c;可以采用调用JavaScript的方式来实现&#xff0c;参考代码如下&#xff1a;

傻傻分不清!24下软考中项易混淆知识点合集

宝子们&#xff0c;在复习软考系统集成项目管理工程师中&#xff0c;是不是觉得有很多知识点含义比较相近&#xff0c;很多友友刚看的时候估计会像我一样迷迷糊糊的&#xff0c;作为一个软考初、中、高级通关的老鸟&#xff0c;在这里给大家整理了学习过程中易混淆的知识点&…

# 常用刀具钢材介绍

常用刀具钢材介绍 文章目录 常用刀具钢材介绍1、M390 钢材详细介绍1.1、关键特性1.2、应用 2、 VG10 钢材详细介绍2.1、关键特性2.2、应用 3、N690 钢材详细介绍3.1、关键特性3.2、应用 4、D2, D53, 和 7Cr13MoV 钢材对比4.1、D2 钢材4.2、D53 钢材4.3、7Cr13MoV 钢材4.4、对比…

Qt5.15.2+VS2019新加类出现无法解析的外部符号

Qt5.15.2VS2019新加类出现无法解析的外部符号&#xff1a; 原因&#xff1a;没有生成对应的moc文件&#xff0c;导致没生成对应的元对象。 解决方案&#xff1a;记事本打开工程vcxproj&#xff0c;把报错的文件ClInclude&#xff0c;改为QtMoc&#xff0c;解决问题 未修改前&…

【Java】如何根据应用场景选择合适的消息中间件?

一、问题解析 21.1 消息中间件的应用场景 消息中间件的应用场景主要有两个&#xff1a;异步解耦与削峰填谷。 我们首先通过电商平台用户注册送积分、送优惠券这个场景来理解异步解耦合。如果不使用消息中间件&#xff0c;电商平台送积分的实现也许是下图这个样子&#xff1a…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码的压缩&#xff08;Keil编译器&#xff09; 第…

【虚拟现实】二、主要的AR/VR硬件设备

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 2.1 微软HoloLens 微软HoloLens是一款领先的混合现实设备&#xff0c;结合了AR和VR的元素&#xff0c;允许用户…

如何安装和配置JDK?(详细步骤分享)

1、下载JDK 访问Oracle官方网站&#xff08;Oracle | Cloud Applications and Cloud Platform&#xff09;&#xff0c;选择适合您操作系统的JDK版本进行下载。建议下载最新的稳定版本。 打开Java&#xff0c;往下拉&#xff0c;找到Oracle JDK 打开后&#xff0c;选择右边的J…

论文Abstract怎么写

摘要是你要写的最后一项内容 步骤 首先先通读自己的文章&#xff0c;清楚自己写的文章是研究型还是技术型&#xff0c;适合描述性的摘要还是知识性。 描述性摘要内含研究目的、目标及方向等&#xff0c;不讲研究结果。字数大约100-200字。知识性摘要则包含研究结果&#xff0c…

日期类型的页面设计

此文章介绍一下日期类型的页面设计 目录 前言 一、设计图 1、星期周期 2、指定日期 3、日期范围 4、日期类型 二、存储逻辑 总结 前言 需求需要配置某天或者某个日期范围或者工作日等做什么事情&#xff0c;需要一个设计图&#xff0c;此文章用来记录设计图纸。 一、设计图 1…

EdgeView 4 for Mac(快速图像查看器) v4.7.5激活版

EdgeView 4是一款图片浏览和管理软件&#xff0c;它可以帮助你快速浏览、编辑和管理图片。EdgeView 4支持多种常见的图片格式&#xff0c;包括JPG、PNG、GIF、BMP、TIFF等&#xff0c;并且可以对图片进行旋转、裁剪、调整大小、添加水印等操作。此外&#xff0c;它还支持批量处…

心理咨询系统源码|心理咨询系统开发|心理咨询系统

心理咨询系统&#xff0c;作为一种集现代化科技与专业心理服务于一体的工具&#xff0c;正逐渐渗透到我们生活的各个角落。它不仅为个人提供了便捷的心理支持&#xff0c;还为企业和组织带来了全新的管理方式。下面&#xff0c;我们将深入探讨心理咨询系统的可应用范围及其带来…

【LLM之RAG】KG_RAG论文阅读笔记

研究背景 该研究集中于通过将生物医学知识图谱&#xff08;KG&#xff09;与大型语言模型&#xff08;LLMs&#xff09;集成&#xff0c;以增强LLMs在生物医学应用中的表现。研究的动机源于LLMs在生成精确内容方面面临的挑战&#xff0c;尤其是在像生物医学这样准确性至关重要…

重生之 SpringBoot3 入门保姆级学习(18、事件驱动开发解耦合)

重生之 SpringBoot3 入门保姆级学习&#xff08;18、事件驱动开发解耦合&#xff09; 5、SpringBoot3 核心5.1 原始开发5.2 事件驱动开发 5、SpringBoot3 核心 5.1 原始开发 LoginController package com.zhong.bootcenter.controller;import com.zhong.bootcenter.service.A…

【C++】stack、queue和deque的使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…

软件安全漏洞分析与发现 复习笔记

1 绪论 本节无考点&#xff0c;仅供了解。 2 基础知识 考点&#xff1a; 汇编码理解和撰写&#xff0c;三种内存地址&#xff0c;不同的页管理方式。windows保护模式可能出题 汇编算法的阅读理解给出汇编片段&#xff0c;理解其意思&#xff0c;输入->输出保护模式…

基于MBD的大飞机模块化广域协同研制

引言 借鉴国外航空企业先进经验&#xff0c;在国内&#xff0c;飞机型号的研制通常采用基于模型定义&#xff08;MBD&#xff09;的三维数模作为唯一的设计制造协同数据源&#xff0c;从而有效减少了设计和制造部门之间的模型沟通成本和重构所需的时间&#xff0c;也减少或避免…