【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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]