当前位置: 首页 > news >正文

Lua语言入门 - Lua常量

在Lua中,虽然没有直接的常量关键字(如C++中的`const`),但你可以通过一些编程技巧和约定来实现类似常量的行为。以下是几种常见的方法:

 1. 使用全局变量并命名规范


你可以定义一个全局变量,并通过命名约定来表示它是一个常量。例如,使用全大写字母来命名常量。

```lua
MY_CONSTANT = 42print(MY_CONSTANT)  -- 输出: 42
```

虽然这种方法不能防止变量被修改,但通过命名约定可以提醒开发者不要修改这些值。

 2. 使用元表(Metatable)


你可以使用元表来控制对表的访问,从而模拟常量行为。

local constants = {};
setmetatable(constants, {__newindex = function(t, key, value)error("Attempt to modify a constant value")end
})constants.PI = 3.14159;print(constants.PI)  -- 输出: 3.14159

-- 尝试修改常量会引发错误

 

lua: const.lua:4: Attempt to modify a constant value
stack traceback:[C]: in function 'error'const.lua:4: in function <const.lua:3>const.lua:8: in main chunk[C]: ?

3. 使用模块和私有变量


你可以将常量放在一个模块中,并使用局部变量来存储它们,这样外部代码无法直接访问这些变量。```lua

-- constants.lua
local M = {}
local privateConstants = {PI = 3.14159,E = 2.71828
}function M.getPI()return privateConstants.PI
endfunction M.getE()return privateConstants.E
endreturn M

```

然后在其他文件中使用这个模块:

```lua

local constants = require("constants")print(constants.getPI())  -- 输出: 3.14159
print(constants.getE())   -- 输出: 2.71828

```

4. 使用只读属性(Read-Only Property)

如果你使用的是Lua 5.3或更高版本,可以使用`__index`元方法来实现只读属性。

```lua

local constants = setmetatable({}, {__index = function(t, key)if key == "PI" thenreturn 3.14159elseif key == "E" thenreturn 2.71828elseerror("Invalid constant name")endend,__newindex = function(t, key, value)error("Attempt to modify a constant value")end
})print(constants.PI)  -- 输出: 3.14159
print(constants.E)   -- 输出: 2.71828

-- 尝试修改常量会引发错误
constants.PI = 3.14  -- 报错: Attempt to modify a constant value
```
 

5.函数+表


function Supermarket()local tabDefinition ={Candy = 1;Cookie = 2;Jelly = 3;};return tabDefinition;
endprint("Candy", Supermarket().Candy);
print("Cookie", Supermarket().Cookie);
print("Jelly", Supermarket().Jelly);
Supermarket().Jelly = 5;
print("Candy", Supermarket().Candy);

相关文章:

Lua语言入门 - Lua常量

在Lua中&#xff0c;虽然没有直接的常量关键字&#xff08;如C中的const&#xff09;&#xff0c;但你可以通过一些编程技巧和约定来实现类似常量的行为。以下是几种常见的方法&#xff1a; 1. 使用全局变量并命名规范 你可以定义一个全局变量&#xff0c;并通过命名约定来表示…...

在Microsoft Windows上安装MySQL

MySQL仅适用于Microsoft Windows 64位操作系统&#xff0c;在Microsoft Windows上安装MySQL有不同的方法&#xff1a;MSI、包含您解压缩的所有必要文件的标准二进制版本&#xff08;打包为压缩文件&#xff09;以及自己编译MySQL源文件。 注意&#xff1a;MySQL8.4服务器需要在…...

windows下vscode使用msvc编译器出现中文乱码

文章目录 [toc]1、概述2、修改已创建文件编码3、修改vscode默认编码 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;C &#x1f448;&#x1f449;开发工具 &#x1f448; 1、概述 在使用MSVC编译器时&#xff0c;出现中文报错的问题可能与编码格式有关。UTF-…...

Git 解决 everything up-to-date

首先使用git log查看历史提交&#xff0c;找到最新一次提交&#xff0c;比如&#xff1a; PS D:\Unity Projects\CoffeeHouse\CoffeeHouse_BurstDebugInformation_DoNotShip> git log commit a1b54c309ade7c07c3981d3ed748b0ffac2759a3 (HEAD -> master, origin/master)…...

Windows配置cuda,并安装配置Pytorch-GPU版本

文章目录 1. CUDA Toolkit安装2. 安装cuDNN3. 添加环境变量配置Pytorch GPU版本 博主的电脑是Windows11&#xff0c;在安装cuda之前&#xff0c;请先查看pytorch支持的版本&#xff0c;cuda可以向下兼容&#xff0c;但是pytorch不行&#xff0c;请先进入&#xff1a;https://py…...

Neo4j 图数据库安装与操作指南(以mac为例)

目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew&#xff08;可选&#xff09; 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…...

2024年12月个人工作生活总结

本文为 2024年12月工作生活总结。 研发编码 Golang语言byte数组赋值 假定有如下变量&#xff1a; var strCode string var bCode [9]byte现需将string类型转换成byte类型&#xff0c;如下&#xff1a; bCode []byte(strCode)无法转换&#xff0c;提示&#xff1a; cannot…...

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应CLL Interpreter&#xff0c;如果没有操作…...

【嵌入式C语言】指针数组结构体

指针与数组 指针与数组指针数组数组指针 多维数组数组名的保存 结构体定义结构体定义结构体变量使用typedef简化结构体声明访问结构体成员结构体内存分配字节对齐位域定义位域位域的限制示例 指针与数组 指针数组和数组指针是两个不同的概念&#xff0c;它们涉及到指针和数组的…...

国产数据库TiDB从入门到放弃教程

国家层面战略&#xff0c;安全的角度&#xff0c;硬件、软件国产化是趋势&#xff0c;鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化&#xff0c;国产数据库TiDB用起来比OceanBase丝滑&#xff0c;本身没有那么重。 从入门到放弃 1. 介绍1.1 TiDB 的主要特点1.2 T…...

深入解析 Spring 属性:spring.codec.max-in-memory-size

在现代 Web 应用开发中&#xff0c;数据传输的大小和效率直接影响到系统的性能和稳定性。Spring WebFlux 作为一种响应式编程框架&#xff0c;提供了强大的数据流处理能力。在使用 WebFlux 时&#xff0c;spring.codec.max-in-memory-size 是一个关键配置&#xff0c;用于定义应…...

在K8S中,如何查看Pod状态的详情?事件显示cpu不足如何处理?

在Kubernetes中&#xff0c;查看Pod状态的详细通常设计使用kubectl命令行工具&#xff0c;这是kubernetes提供的一个强大的管理工具。以下是如何查看Pod状态详情的步骤&#xff1a; 1. 查看Pod状态详情 列出所有Pod&#xff1a; 使用kubectl get pods命令可以查看集群所有Po…...

ArcGIS教程(009):ArcGIS制作校园3D展示图

文章目录 数据下载校园3D展示图制作创建要素类矢量化【楼】要素矢量化【绿地】矢量化【范围】矢量化处理打开ArcScene添加动画数据下载 https://download.csdn.net/download/WwLK123/90189025校园3D展示图制作 创建要素类 添加底图: 新建【文件地理数据库】,并修改名称为【…...

REDIS2.0

string list hash set 无序集合 声明一个key&#xff0c;键里面的值是元素&#xff0c;元素的类型是string 元素的值是唯一的&#xff0c;不能重复 多个集合类型之间可以进行并集&#xff0c;交集&#xff0c;集查的运算 sadd test1 a b c c d &#xff1a;添加5个元素&am…...

算法练习——模拟题

前言&#xff1a;模拟题的特点在于没有什么固定的技巧&#xff0c;完全考验自己的代码能力&#xff0c;因此有助于提升自己的代码水平。如果说一定有什么技巧的话&#xff0c;那就是有的模拟题能够通过找规律来简化算法。 一&#xff1a;替换所有问号 题目要求&#xff1a; 解…...

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

2024 年度总结系列 2024 年 10 月&#xff0c;京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践&#xff0c;荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…...

pytorch张量的fill_方法介绍

在 PyTorch 中&#xff0c;fill_ 是一个张量的原地操作方法&#xff0c;用于将张量中的所有元素填充为指定的值。 方法签名 Tensor.fill_(value)参数 value (float or int): 要填充到张量中的值。 返回值 返回调用该方法的张量本身&#xff0c;且是经过修改后的张量。 特…...

WAP短信格式解析及在Linux下用C语言实现

WAP短信格式解析及在Linux下用C语言实现 一、引言二、WAP短信格式概述三、WAP短信头的内容四、UDHI与WAP短信体的关系五、在Linux下用C语言解析WAP短信头及短信体内容一、引言 在移动通信领域,短信作为一种古老却稳定的通信方式,一直扮演着重要的角色。随着技术的发展,短信…...

Linux的诞生与发展、体系结构与发行版本

Linux作为一个开源操作系统&#xff0c;在过去几十年中一直扮演着至关重要的角色。它不仅深刻影响了服务器、桌面和移动设备&#xff0c;还成为了开源运动的重要组成部分。本文将介绍Linux的历史、体系结构、以及主要的发行版&#xff0c;帮助你更好地了解Linux的方方面面。 一…...

为什么Mysql用B+树作为索引

首先&#xff0c;能作为索引的数据结构有很多&#xff0c;例如数组、链表、二叉树 数据和索引都是存储在磁盘里的。 我们通过索引来查询数据时&#xff0c;先从磁盘读取索引到内存&#xff0c;再通过索引从磁盘中找到某行数据&#xff0c;然后读入到内存。 要设计一个适合 MySQ…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...