【问题标题】:lua: Any difference between returning a local and returning a global variable?lua:返回局部变量和返回全局变量有什么区别?
【发布时间】:2021-11-07 07:49:55
【问题描述】:
function test1(x) local x=x return x end
function test2(x) return x end

假设我将它们称为 test(5)。这里的返回值在幕后有什么区别?代码块中 x 的任何使用都遵循本地规则,我得到了那么多。但是当我返回 x 时会发生什么?主要是这两个函数的返回值不同还是一样?是任何一个函数,在运行时,比另一个函数更有效地处理等等。

我的理解是返回值是将 x 作为本地值吐出到它被调用的任何地方。

  function test3()
       test1(5) --local 5
       a=test1(5) --global a=5
    end

那么用 test2(5) 代替 test1(5) 有什么不同吗? test1 是否将 x 变成本地然后返回它,而 test1 只是抓住我在本地制作的本地 x 并返回它?这里有什么小细节吗?

我的兴趣主要是使用本地作为一种优化形式。就像优化碰撞公式一样:在返回对它们进行的任何数学运算之前,我是否应该将每个参数定义为本地参数。

function mult(x,y)
  local x=x
  local y=y
  return x*y
end

function mult2(x,y) return x*y end

【问题讨论】:

  • 您的x 在这两个函数中都是本地的,在test1 中,您只是将参数x 与本地x 遮蔽,在您已经证明没有必要的情况下,我的一本书建议您阅读,示例将显示local 的重要性,Lua Gems 它包含的一些优化遵循您的提问,相关位将是第 2 章示例的第三页lua.org/gems/sample.pdf
  • 您能否详细说明一个需要的情况...?据我所知,参数以及分配的参数总是在函数中定义为本地的?所以我只会在函数中分配新变量时使用本地? function mult2(x,y) local x=x+33 return xy end......这被认为是不同的吗? function mult2(x,y) local p=x+33 return py end 是你在暗示的吗?我的 OP 是从字面上创建的,因为我阅读了该文档,其中概述了当地人对优化的重要性。
  • stackoverflow.com/questions/24729599/... 如果没有将其声明为本地,它会明确表示它是全局的。参数没有声明为本地的,所以它们是全局的?或者这是一个特殊情况,像函数 (x) local x=x 的示例这样的设置参数不需要定义为本地?类似于 i=1,10 的方式... i 自动是本地的。或者参数只是占位符,所以它们要么是本地的,要么只是类似于占位符的东西,但是当变量赋值发生时......上面的讨论起作用了。
  • “如果它没有被声明为本地它的全局,它会明确表示。”这并不完全正确。 for 语句中的参数和变量是隐式本地的。

标签: lua return return-type


【解决方案1】:

这不会有帮助,因为参数不会通过将它们的值存储在局部变量中来优化。您有时可能会看到存储表字段的这种优化(以避免关联的表访问步骤),但这不是那里发生的事情。

如果您对分配返回值感兴趣,那么将它们分配给局部变量会快一点,但我怀疑这是premature optimization 的情况,因为这种类型不太可能对您的应用程序有明显帮助更改,除非您每秒循环执行大量此任务(即使在这种情况下,您也需要首先分析应用程序以确认这是导致问题的原因)。

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多