为什么要用一个额外的参数调用Lua中的这个函数?

为什么要用一个额外的参数调用Lua中的这个函数?,lua,Lua,在文件linalg.lua中,我有以下函数声明: function dot(A,B) return sum(mult(A,B),2); -- sum along second dimension end 然后在另一个文件中我有这些调用: require 'linalg' -- First fundamental Coeffecients of the surface (E,F,G) local E = dot(Xu,Xu,2) local F = dot(Xu,Xv,2) local

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

function dot(A,B)
   return sum(mult(A,B),2); -- sum along second dimension
end
然后在另一个文件中我有这些调用:

require 'linalg'

-- First fundamental Coeffecients of the surface (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))

-- Second fundamental Coeffecients of the surface (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。

我最终测试了自己(通常不使用Lua,但安装了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
引自

参数与局部变量完全相同,使用函数调用中给定的实际参数初始化。可以使用与其参数数量不同的参数来调用函数。Lua将参数的数量调整为参数的数量,就像它在多重赋值中所做的那样:多余的参数被丢弃;额外参数为零


因此,只需忽略额外的参数,而缺少的参数为零。对这是语言工作原理的一部分,使用起来非常好。

对不起,@hjpotter92从我在你的链接中读到的内容来看,我不清楚我是否可以用两个参数声明一个函数并用3调用它(顺便说一句,我从未在任何语言中看到过没有某种错误消息的情况)。是的,你已经在几种语言中看到过它,但是没有直接认出它。例如,
用python打印a、b、c、
。调用函数时,会忽略额外的参数。更少的参数也不会引发错误。它们将被分配一个nil值。@hjpotter92只是为了澄清一下(很抱歉这么坚持),据我所知,只有当您有
def function(args)
并解包args或检查其长度时,才可以这样做。事实似乎并非如此,
函数dot(A,B)
指出应该使用两个参数精确地调用它。以前的程序员可能认为
2
参数是必需的,但实际上并非如此,但我想知道在Lua的情况下,这是否会产生错误,或者程序是否会正常运行。它没有被丢弃。它位于堆栈上,但使用内置功能无法访问<代码>回显“x=1 y=2 z=3函数f(a,b)结束f(x,y,z,4)”| luac-l-l-v-