【问题标题】:Lua - variations in the declaration of functionsLua - 函数声明的变体
【发布时间】:2018-04-05 08:54:34
【问题描述】:

我对 Lua 很陌生,对函数的声明方式有点困惑。

这两种变体似乎有效:-

第一变体

test = {calc = function (x,y)
    z = x + y
    return z
end
}

result = test.calc (1,2)
print (result)

第二变体

test = {}

function test.calc(x,y)  
  z = x + y
  return z
end

result = test.calc (1,2)
print (result)

选择特定的变体有什么影响吗?

【问题讨论】:

  • 没有区别,更正第一个变体:test = {calc = function (x,y) z = x + y return z end }
  • 另外,使用local z = ...
  • 好的,谢谢..这解决了这个谜!有很多东西要学!

标签: function lua


【解决方案1】:

Lua 没有函数声明。它有函数定义,它们是表达式(第一个变体),在运行时产生一个函数值当评估。其他语法形式实际上是函数定义表达式和赋值的组合。

在第三个变体中,它加上一个隐式的第一个参数self。它旨在用于字段的“方法调用”。方法调用只是函数调用的另一种形式,它将保存字段(函数值)的表值作为隐式第一个参数传递,因此函数可以引用它,尤其是访问它的其他字段。

第三变体:方法

local test = { history = {} }

function test:calc(x,y)
  local z = x + y
  table.insert(self.history, { x = x, y = y })
  return z
end

print(test.calc)
local result = test:calc(1,2)
print(result)
print(test.history[1].x, test.history[1].y)

【讨论】:

    【解决方案2】:

    它们的效果完全相同。根据可读性选择一个或另一个。 (我更喜欢第二个。)

    【讨论】:

    • local test={} 存在一些差异。在这种情况下,funciton 无法访问表本身。但是可以通过local test test={}修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多