【问题标题】:How can I pass varargs to lua files?如何将可变参数传递给 lua 文件?
【发布时间】:2010-09-27 09:29:38
【问题描述】:

在魔兽世界插件中,表格作为第二个可变参数传递:

-- This is often at the top of WoW lua files
local AddonTable = select(2, ...)

有没有办法用普通的lua做到这一点?我正在尝试编写一些单元测试,对我当前的代码进行最小的更改。到目前为止,当我只使用 require 时,我可以使用 select(1, ...) 来获取第一个参数(模块),但我似乎无法弄清楚如何填充第二个参数。

更新:

除了使用require,我可以使用loadfile 来做我需要的事情。当魔兽世界加载一个插件时,它会传递插件的名称和一个可以填充插件功能的表格。我可以使用此代码重现该功能:

local addon = loadfile('MyAddon.lua')
local AddonTable = {}
addon('AddonName', AddonTable)

【问题讨论】:

    标签: lua


    【解决方案1】:

    另外,选择调用是不必要的。做就是了: local AddonName , AddonTable = ...

    【讨论】:

    • 我不需要使用AddonName,我只需要通过它来实现兼容性。
    • 分配它(而不是使用它)仍然比调用 select 便宜;但我想我只是在吹毛求疵...通常的做法是为 _ 分配丢弃的值(例如当您使用 string.find 时),但如果您知道它们的含义,您不妨给它们起个名字。 ..
    【解决方案2】:

    重新表述你的问题:

    首先要了解在 wow 中发生的所有事情是你的 lua 文件正在被 lua_loadfile'd,然后生成的闭包正在使用堆栈上的 2 个参数执行。

    从外部角度来看,这类似于 require 所做的事情,但从外部角度来看,它是不同的。

    Require 返回模块 - 相当于第二个参数的 WoW 表。 require 的参数(模块的名称)相当于第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 2012-05-22
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多