Lua是一种功能强大,快速,轻量级,可嵌入的脚本语言。它是动态类型的,通过解释字节码来运行,并具有自动垃圾收集功能。它的速度是机器学习社区广泛使用的主要原因之一。它通常被称为“可扩展的扩展语言”。
我正在尝试使用 Lua 为 vanilla wow 创建一个简单的插件,第一个任务是初始化一些 UI 并调用一个函数进行初始配置。 MyAddonName.xml 我正在尝试使用 Lua 为 vanilla wow 创建一个简单的插件,第一个任务是初始化一些 UI 并调用一个函数进行初始配置。 MyAddonName.xml <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ https://raw.githubusercontent.com/Gethe/wow-ui-source/live/Interface/AddOns/Blizzard_SharedXML/UI.xsd"> <Frame name="MyAddonName" parent="UIParent"> <Size x="384" y="512" /> <Anchors> <Anchor point="CENTER" relativePoint="CENTER" relativeTo="UIParent" /> </Anchors> <Layers> <Layer level="BACKGROUND"> <Texture name="$parent_Portrait" parentKey="portrait" file="Interface\Icons\INV_Misc_EngGizmos_30"> <Size x="60" y="60" /> <Anchors> <Anchor point="TOPLEFT"> <Offset x="7" y="-6" /> </Anchor> </Anchors> </Texture> </Layer> </Layers> <Scripts> <OnLoad function="MyAddonName_OnLoad" /> </Scripts> </Frame> </Ui> MyAddonName.lua function Print(msg, r, g, b) DEFAULT_CHAT_FRAME:AddMessage("|c0033ffccMyAddonName|r "..msg.."", r, g, b) end function MyAddonName_OnLoad(self) Print("loaded"..tostring(self), 0, 1, 0) // <- self exists self.items = {} end function MyAddonName_TestFunct() Print(MyAddonName.items) or Print(self.items) // <- not exists, attempt to index field 'items' (a nil value) end MyAddonName_TestFunct稍后会调用,出于测试目的,我刚刚从调用了它 /run MyAddonName_TestFunct() /run MyAddonName_TestFunct() 我假设在从xml部分加载插件后,将调用带有self的MyAddonName_OnLoad,其中self是代表插件实例的表,稍后在某些事件中我可以调用MyAddonName_TestFunct,并将一些初始值存储在可访问的表中通过self。 我检查了其他插件(例如BetterCharacterStats)并且有类似的代码,例如 BetterCharacterStats.lua function BCS:OnLoad() // `BCS:` means that self passed implicitly 我还注意到表BSC显式创建,但因此我在检查期间有self - 这对我来说不需要。 ---- 这是一个更完整的示例我测试过(使用更多代码)-我正在尝试遵循一些教程,现在结果有点不同 这是打印的结果 输出图像 任何人都可以建议我错在哪里吗? 您在 OnLoad 事件期间遇到的 self 为零的问题是《魔兽世界》UI 脚本中的一个常见问题,尤其是对于自定义框架。这种情况通常会发生,因为当 OnLoad 脚本被触发时,对 self 的引用不会按照您期望的方式自动传递,特别是当它是自定义框架或按钮时。 原因如下: 在 WoW 中,当您将 self 事件与 OnLoad 或 frame 结合使用时,button 参数通常由系统自动传入。但是,如果在 OnLoad 内处理 XML 事件,则当事件触发时,frame 可能尚未完全初始化,或者 XML 设置可能无法正确链接到 Lua 函数。 根本原因 OnLoad 事件通常在框架加载时触发,但在某些情况下(取决于上下文), self 可能不会按预期引用框架。 直接在Lua中引用框架 如果你不想改变XML,你可以修改Lua函数来直接获取框架的引用,即使self是nil。您可以通过在 frame 函数中按名称引用 MyAddonName_OnLoad 来实现此目的。 修复: local frame = self or MyAddonName -- Fallback to MyAddonName if self is nil
如果我有一个具有已知属性的表,但属性的顺序可能未知: 本地人 = { 名称 = '詹姆斯', 年龄 = 30, } 我可以可靠地解构它吗: 当地名称...
Pandoc 通过其 --lua-filter 参数原生支持 lua 过滤器。 然而,我想知道它使用的是哪个版本的lua以及是否可以导入lua模块,例如luacom(w...
我可能错过了这一点,但是是否有一个内置方法可以将 lua 表序列化/反序列化为文本文件,反之亦然? 我有两种方法可以在固定的 lua 表上执行此操作
我想在内存中永远使用三个本地函数: 代理:PlayerParamRecover(); 代理:PlayerRecover(); 代理:EnableInvincible(10000,true); 我不知道如何将它们无限添加
所以我第一次在lua中遇到协程的概念,lua的实现或多或少是可以理解的..我现在正在学习方案,我明白实现了相同的功能...
`io.read("*all")`中的"*all"是什么意思?
我知道格式“*a”用于读取整个文件,“*l”用于读取一行。但是“*all”(出现在《Lua 编程》一书中)是什么意思?我还看到了“*...
在lua中为什么在第一次迭代中执行print(“Name不能为空”)而不是table[i] = io.read()
正如标题所暗示的,在第一次迭代中执行 print ("Name can't beempty") 而不是在第一次迭代中执行 table[i] = io.read () 这是完整的代码 io.write("多少...
我正在尝试运行以下代码 本地 lgi = require("lgi") 本地 Gdk = lgi.Gdk 本地 Gtk = lgi.Gtk Gtk.init() -- 创建一个新窗口 本地窗口 = Gtk.Window({ 标题=“...
如何在 gopher-lua v1.1.0 中使用“goto”?
如何在 gopher-lua v1.1.0 中使用“goto”?似乎 gopher-lua 已经通过 v1.1.0 链接支持“goto” 我已经更新了 gopher-lua 的版本为 v1.1.0。但是当我使用 goto goto 和 ::lab...
如何使用纯 Valkey/Redis 自动删除数百万个与模式匹配的键?
假设我有数百万个前缀:键。 我想以原子方式清除它们。 如何使用 Redis 自动删除与模式匹配的键显示了许多选项。有些使用 redis-cli 或 ...
AstroNvim 中 nvim-cmp 和 copilot.vim 之间的 Tab 键映射冲突
我正在使用 AstroNvim,并且刚刚安装了 copilot.vim。它工作正常,只是我想使用 Tab 键接受副驾驶建议。但是,Tab 键映射到“下一步完成”...
为什么 table.unpack() 函数仅在函数后面没有任何内容的情况下才打印解压的表? > print(table.unpack({1,2,3})) 1 2 3 > print(table.unpack({1,2,3}),...
Love2D 中网格上的奇怪纹理行为,需要帮助才能实现我期望的结果
以下代码有这样的结果: 局部网格 = nil 本地img = love.graphics.newImage("test_blue.png") 函数love.load() 网格 = love.graphics.newMesh(4, img, "风扇") 网格:设置顶点({ ...
我有一个简单的项目,正在制作一款卡牌战斗游戏。战斗顺序如下: 重复 BattleClient.PlayerAttackTween() 任务.等待(战斗速度)
位置不是模型“Workspace.Orchooselimbo”的有效成员
本地ProximityPrompt = script.Parent ProximityPrompt.Triggered:连接(函数(播放器) 等待(1) Player.Character.HumanoidRootPart.Position = game.Workspace.Orchooselimbo.Position 结尾) T...
我写了一个简单的Lua脚本,点击鼠标后左键单击5。问题是,在第 12 行,如果我包含“not”,它只会重复一次,如果我删除它,它将永远重复。我想开始并且...
当我尝试这个粗略的例子时,我立即得到一个 nil(不是 5 秒的块)。无法在文档中找到有关 Lua 函数中支持或不支持的命令的任何内容 #!lua名称=