【问题标题】:What can be passed to Lua functions as arguments?什么可以作为参数传递给 Lua 函数?
【发布时间】:2014-08-20 15:01:43
【问题描述】:

我一直在搜索文档和各种问题,但我还没有看到这个问题的明确答案。哪些类型的值可以作为参数传递给 Lua 函数?

我相信答案是:

  • 普通的旧数据,例如整数或布尔值
  • Lua 表
  • 其他 Lua 函数

我正在寻找的是可以将所有内容传递给函数的综合列表。

【问题讨论】:

  • 呃...所有值。为什么你会期望会有一些限制?
  • 如果您尝试从另一种语言传入原始对象怎么办?
  • 是的,即使是“原始对象”作为用户数据也可以传递

标签: function lua arguments


【解决方案1】:

来自 Lua reference manual:

Lua 中的所有值都是一等值。这意味着所有值都可以存储在变量中,作为参数传递给其他函数,并作为结果返回。

【讨论】:

  • 那么自然的问题是,在 Lua 中究竟什么才是值?
  • @bazola,手册的同一部分定义了值是什么。
  • 在 2.1 节中说: Lua 中有八种基本类型:nil、boolean、number、string、function、userdata、thread 和 table。抱歉,本来应该通读一遍的,但是时间太紧了!
【解决方案2】:

可变参数表达式作为参数

除了将任何值作为参数传递之外,还有一个不是值的参数:...,即“vararg 表达式”。

它只能用在作为形式参数的函数体中。当在列表末尾使用时,它会使用它所代表的所有实际参数来扩展列表。在列表结尾之前使用时,它仅使用它所代表的第一个实际参数来扩展列表。

local function f(a, b, ...)
    print("f", a, b, ..., "end")
end

local function g(x, y, ...)
    print( "g", x, y, ...)
end

f()
f(1)
f(1,2)
f(1,2,3)
f(1,2,3,4)
f(1,2,3,4,5)
g()
g(1)
g(1,2)
g(1,2,3)
g(1,2,3,4)
g(1,2,3,4,5)

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2016-11-06
    • 2017-07-11
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2012-01-25
    • 2013-07-13
    相关资源
    最近更新 更多