我无法理解 gawk 函数参数的使用。通常,参数定义函数的局部变量。
但是参数可以用作函数可以使用的输入吗?
看过return
which的使用其实可以通过调用返回一个值
val=myfunc()
当您仍然可以访问全局变量时,将全局值作为输入参数传递给函数有什么好处?
我无法理解 gawk 函数参数的使用。通常,参数定义函数的局部变量。
但是参数可以用作函数可以使用的输入吗?
看过return
which的使用其实可以通过调用返回一个值
val=myfunc()
当您仍然可以访问全局变量时,将全局值作为输入参数传递给函数有什么好处?
你的问题是基于一个错误的前提。
不是。通常,参数为传递给函数的值定义变量名称。
awk
无法声明局部范围的变量。但是由于所有函数参数都是可选的,因此可以接受的做法是使用除了可以在函数中局部使用之外没有其他用途的变量来重载函数参数列表。因此,您的问题的答案是“是”:变量可用于将值传递给函数。
例如,
这里函数每次都使用不同的值调用自身(前 5 个,然后递减值 4、3、2)。尝试为此使用全局变量将非常困难。
另请注意,函数的标量参数是按值传递的,而数组参数是按引用传递的。因此,该函数可以将调用代码中声明的数组值更改为该函数,从而返回多个值。
这包括在数组参数中创建新元素的能力,即使它最初是作为空数组传入的。
可以这样做:它表明同名数组存在全局和局部作用域,它们可以具有不同的长度并包含不同的数据,并且数组通过引用传递并且可以返回多个值。
GNU Awk 运行得很好——它在第一次访问时决定 X 的类型。
nawk
(Solaris Awk)似乎在传入时做出该决定(结果可能是 SegViol)。为确保
nawk
通过引用将 X 传递给函数,您可能需要在传入之前将其显式创建为零长度数组,方法是使用零长度模式拆分零长度字符串:与任何编程语言中的任何函数一样:您每次都可以传递一个不同的(全局)变量,并且该函数不需要知道它不需要做它的工作的事情。
作为一个简单的例子:
想象一下那里有一个更复杂的函数来代替
sum()
,这样在两个分支中复制它就不再有意义了。