为什么 Lua 中的这个函数会被调用时带有一个额外的参数?

在文件 linalg.lua 中有以下函数声明:

function dot(A,B)
   return sum(mult(A,B),2); -- sum along second dimension
end

然后在另一个文件中有以下调用:

require 'linalg'

-- 曲面的第一基本形式系数(E,F,G)
local E = dot(Xu,Xu,2)
local F = dot(Xu,Xv,2)
local G = dot(Xv,Xv,2)

local m = cross(Xu,Xv,2)
local p = sqrt( dot(m,m,2) )
local n = div(m,concath(p, p, p))

-- 曲面的第二基本形式系数(L,M,N)
local L = dot(Xuu,n,2)
local M = dot(Xuv,n,2)
local N = dot(Xvv,n,2)

我不明白的是:

为什么 dot 函数被调用时有三个参数(最后一个始终为2),而函数声明只有两个参数?这是 Lua 的惯用语吗?

该代码在一个能够给出正确结果的系统中正常运行,现在我需要将它翻译成 Python/Numpy。

点赞
用户401828
用户401828

我最终进行了测试(通常不使用Lua,但已安装),似乎它会忽略额外的参数:

例如,在下面的代码片段中,函数使用两个参数声明,但使用三个参数调用,仍然有效,因为第三个参数似乎被丢弃:

function sum(a,b)
   return a + b;
end

local a = 1
local b = 2
local c = 100

local d = sum(a,b,c)

print(d)
> 3
2014-05-30 18:36:28
用户3586583
用户3586583

参数的工作方式像本地变量一样,它们被初始化为函数调用中给出的实际参数。您可以使用与其参数数量不同的参数调用函数。Lua会将参数的数量调整为与其参数的数量相同,就像在多重分配中一样:额外的参数被丢弃;额外的参数获得nil。因此,简单地说,额外的参数被忽略,缺失的参数变成了nil。是的,这是语言的工作原理的一部分,完全可以使用。

2014-05-30 21:26:07