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

2024-06-12 22:28

本文主要是介绍【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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      10x = "a"  
y = "b"  
print(x, y) -- a   ba = 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)) -- numberprint(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) -- 123print(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%

这篇关于【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.