Reference 如何在Lua中引用表中的int值?这可能吗?

Reference 如何在Lua中引用表中的int值?这可能吗?,reference,lua,Reference,Lua,我想引用一个整数,但引用应该在表中。目标是一个自动字符串格式化函数,它会在每一帧更新值 >> num = 5 >> table = {} >> table[1] = num >> num = 10 >> print(table[1]) >> 5 如果我运行这个函数,值num只会被复制,但我需要一个引用。 目前我正在用lua löve2D库编写一个游戏。以下是我的代码摘录: function StringDrawSystem

我想引用一个整数,但引用应该在表中。目标是一个自动字符串格式化函数,它会在每一帧更新值

>> num = 5
>> table = {}
>> table[1] = num
>> num = 10
>> print(table[1])
>> 5
如果我运行这个函数,值num只会被复制,但我需要一个引用。 目前我正在用lua löve2D库编写一个游戏。以下是我的代码摘录:

function StringDrawSystem:draw()
    for index, entity in pairs(self.targets) do
        local str = entity:getComponent("StringComponent")
        love.graphics.setFont(str.font)
        local position = entity:getComponent("PositionComponent")
        love.graphics.print(string.format(str.string, unpack(str.values)), position.x, position.y)
    end
end
str.values
是一个表,其中应包含对所需值的引用。这些价值不一定是全球性的

entity:getComponent("StringComponent") -- is equal to 
entity.components.StringComponent -- StringComponent is just 
                                  -- a component added to the entity 
StringComponent是一个包含3个字段的简单类

StringComponent = class("StringComponent")

function StringComponent:__init(font, string, values) 
    self.font = font
    self.string = string
    self.values = values
end

您不能直接执行此操作,但可以在需要字符串值时提供一个要调用的闭包,如下所示:

x = 5
table = {}

table["key"] = function() return x end

print(table["key"]()) -- Will print 5
x = 10
print(table["key"]()) -- Will print 10

如果没有一个更高级别的重定向,就无法执行此操作,因为无法引用数值。您可以在表中存储所需的值,并修改该表中的第一个元素:

num = {}
num[1] = 5
table = {}
table[1] = num
num[1] = 10
print(table[1][1])
-- 10

我找到了解决当前问题的办法。我想引用的每个int在某种程度上都是另一个表的子表。例如,如果您想引用
table.int
table2.int2
我将
{table,“int”}、{table2,“int2”}}
传递到StringComponent的构造函数中的
值。
现在,您可以使用

local val = {}
for k, v in pairs(str.values) do
    table.insert(val, v[1][v[2]])
end
现在我可以用

string.format(str.string, unpack(val))

如果您有更好的解决方案,请随时发布,这样我可以优化代码。

此解决方案的主要问题是,我必须为要打印的每个值硬编码一个函数。但是我想要打印的值是由不同的系统和管理我的整个系统的主引擎生成的。这些值在引擎中的某个位置,不可预测,但我可以在某些点读取它们。此时,我想将它们放在表中,以便有一个稳定的动态生成的引用来打印这些值。这不是C。如果必须这样做,您应该考虑重新考虑您的方法。不,它不会打印
10
!您提出的任何解决方案都必须使用表或用户数据,因为这是lua中仅有的两种具有可变引用语义概念的类型。
entity:getComponent
是负责设置
str.values
表的函数吗?您可以设置
str.values
,这样就可以了触发一个
\uuu索引
,并让metamethod建立值表以动态返回。但您仍然需要知道从何处获取这些值--可能通过像Colonel所示的upvalue来实现。如果您演示如何设置
str.values
,我可以给出一个更具体的示例。因此,我必须参考表。谢谢你的建议。