指定Lua参数应该是复制还是引用。

我想知道是否有一种方法可以指定 Lua 函数的参数是应该复制还是引用。颜色是表示颜色的对象。

例如,使用以下代码:

function editColor(col)
    col.r = 0
    print(tostring(col.r))
end

color = Color(255, 0, 0)
print(tostring(color.r))
editColor(color)
print(tostring(color.r))

会输出:

255
0
0

所以 col 是对颜色的“引用”,但这段代码:

function editColor(col)
    col = Color(0, 0, 0)
    print(tostring(col.r))
end

color = Color(255, 0, 0)
print(tostring(color.r))
editColor(color)
print(tostring(color.r))

会输出:

255
0
255

这里颜色被复制了。

是否有一种方法可以强制复制或引用参数?就像 C++ 中的 & 运算符一样?

原文链接 https://stackoverflow.com/questions/6078512

点赞
stackoverflow用户296829
stackoverflow用户296829

不,Lua 中的参数始终按值传递 (链接镜像)。然而,所有变量都是_引用_。在您的第二个示例中,在 editColor 中,您正在覆盖变量 col 引用的内容,但这仅适用于该范围。您需要改变一些东西,也许不是传递要重新赋值的变量,而是使函数返回某些内容,并在外部进行重新赋值。祝好运。

2011-05-21 00:46:59
stackoverflow用户5386097
stackoverflow用户5386097

这将实现你想要的功能。将要传递的变量放入一个表中以按引用传递。你可以使用表来按引用传递任何东西,不仅仅是字符串。

-- 你想要通过引用传递字符串到的函数。
local function next_level( w )
  w.xml = w.xml .. '<next\>'
end

-- 一些顶级函数,你想要用来累积文本。
function top_level()
      local w = {xml = '<top>'} -- 这将创建一个具有一个名为"xml"的条目的表。
                            -- 你可以使用任何你想要的名称来调用这个条目,只要
                            -- 在其他函数中保持一致即可。
  next_level(w)

  w.xml = w.xml .. '</top>'
  return w.xml
end

--输出: <top><next\></top>
2018-05-10 17:00:14
stackoverflow用户1429446
stackoverflow用户1429446

Lua 是一种糟糕的语言。当你需要做一些稍微复杂的事情时,就会遭受它的简单。

2018-11-23 16:17:27