Lua基础

这篇博客介绍了如何在Lua中模拟C#的类结构,通过`dofile`函数加载和引用不同层级的Lua脚本文件。文章详细讲解了相对路径和绝对路径的使用,并强调了保存脚本时需以.lua为后缀的重要性,从而在实际项目中实现热更新功能。
1.制作模块 (模拟c#中的静态类)
calc={} --初始化模块

--定义变量
calc.name="KiwiClac";

--定义函数
function calc.jia(a,b)
    return a+b;
end

function calc.jian(a,b)
    return a-b;
end

--结束模块
return calc;
require("calc") --引用模块可以用 require calc 引用

--访问模块变量
print(calc.name);

--访问模块函数
print(calc.jia(1,2));

2用table制作元素表
--设置元素表
tableA={} --表A[主表]
tableB={} --表B[元表/子表]

--设置tableB为tableA的元表
setmetatable(tableA,tableB);
--判断tableA是否有元素
print(getmetatable(tableA));

table表访问元表:
tableA={name="Kiwi",age=12};
tableB={gender="x",address="烟台"};

setmetatable(tableA,tableB);
tableB.__index=tableB --设置元表的__index索引

print(tableA.name,tableA.age);
--print(tableA[name],tableA[age]);
print(tableA.gender,tableA.address);




3.模拟c#中的类

--模拟c#中的类
Person={name,age,gender,address="China"} --在Person类中模拟字段

--模拟构造方法
function Person:New()
   local obj={} --初始化一个新的表
	setmetatable(obj,Person); --把当前的类[表]设置为新表的元表
	Person.__index=Person; --指定元表的__index索引
	return obj;
end

--模拟一个方法
function Person:Show()
	print(self.name,self.age,self.gender,self.address);
end

--实例化对象
p1=Person:New()
p1.name="ade";
p1.age="1";
p1.gender="df";
p1.address="dfada";
p1:Show();


4.模拟类的继承
--模拟类的继承

--父类
Animal={name};

--构造方法
function Animal:New(name)
    local obj={};
	setmetatable(obj,self);
	self.__index=self;
	self.name=name;
	return obj;
end

--普通方法
function Animal:Tostring()
    print(self.name);
end


--子类/继承模拟
Cat=Animal:New();

--子类的构造方法
function Cat:New(name)
    local obj=Animal:New(name);
	setmetatable(obj,self);
	self.__index=self;
	return obj;
end

--子类普通方法
function Cat:Eat(food)
    print(Cat.name.."Eat"..food);
end


--实例化
jfm=Cat:New("加菲猫");
jfm:Eat("yu");

5.引用Lua模拟类

   dofile([路径名]脚本名.lua)

例:

  1.以当前脚本为定位点寻找所要引用的脚本

   dofile(“1.Lua”)--脚本在同一个文件夹

   dofile("文件夹名\\1.lua") --所要引用的脚本在与当前脚本同级的文件夹中

   dofile(“..\\1.lua”)--"..\\"是返回上一级,当前脚本的文件夹与所引用脚本在同 一级中

  2.使用绝对路径

   dofile(“c:\\dfa\\dfa\\1.lua”)

  

注意:保存的脚本要以.lua结尾

### Lua基础语法概述 Lua 是一种轻量级脚本语言,具有简单而强大的特性。以下是关于 Lua 的基本语法介绍: #### 变量与数据类型 Lua 支持八种原生数据类型[^2],其中包括四种简单的变量类型(`nil`, `number`, `string`, 和 `boolean`),以及四种复杂的变量类型(`table`, `function`, `thread`, 和 `userdata`)。 - **Nil**: 表示无值的状态。 - **Number**: 用于表示整数和浮点数。 - **String**: 字符串可以通过双引号或单引号定义。 - **Boolean**: 包含两个值:`true` 和 `false`。 例如: ```lua a = nil -- Nil 类型 b = 10 -- Number 类型 c = "Hello" -- String 类型 d = true -- Boolean 类型 ``` #### 关键字 Lua 中的关键字列表如下[^3],这些关键字不能被用作变量名或其他标识符名称: - `and`, `break`, `do`, `else`, `elseif`, `end`, `false`, `for`, `function`, `if`, `in`, `local`, `nil`, `not`, `or`, `repeat`, `return`, `then`, `true`, `until`, `while`, `goto`. #### 字符串操作 字符串的操作是 Lua 编程中的重要部分之一。通过内置的 `string` 库可以实现各种字符串处理功能。例如,使用 `string.sub()` 函数可以从指定位置提取子字符串[^1]。 代码示例: ```lua print(string.sub("Hello Lua", 4, 7)) --> 输出 'lo Lu' print(string.sub("Hello Lua", 2)) --> 输出 'ello Lua' print(string.sub("Hello Lua", -3, -1)) --> 输出 'ua' ``` #### 函数定义 函数在 Lua 中既可以作为普通的语句块存在,也可以作为一个表达式的返回值。匿名函数通常用于回调或者闭包场景中[^4]。 示例代码展示如何创建并调用带参数的函数: ```lua -- 定义一个加法器函数 function add(a, b) return a + b end result = add(5, 3) -- 调用该函数并将结果赋给 result print(result) --> 输出 8 ``` 对于更高级的应用场合,则可能涉及嵌套函数甚至闭包结构的设计思路。下面是一个利用闭包特性的实例演示: ```lua function createCounter(startValue) local count = startValue or 0 -- 初始化计数值,默认为零 return function() count = count + 1 -- 更新内部状态 return count -- 返回当前计数值 end end counterA = createCounter(10) -- 创建基于初始值 10 的计数器 A print(counterA()) --> 输出 11 print(counterA()) --> 输出 12 ``` --- #### 控制流语句 控制流程主要包括条件判断 (`if`)、循环迭代(`for`, `while`)等逻辑构建单元。这里给出几个典型片段供参考学习: ##### 条件分支 ```lua value = 5 if value > 0 then print("Positive number") --> 当 value>0 执行此条目 elseif value == 0 then print("Zero") else print("Negative number") end ``` ##### 循环遍历 ```lua for i=1,5 do -- 数值范围内的固定次数执行动作 print(i) end --> 分别输出 1 到 5 i = 1 -- 使用 while 实现相同效果 while i <= 5 do print(i) i = i + 1 -- 自增操作不可遗漏 end ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值