Lua 中 函数 的参数,为形式参数,即如果我们通过传值的方式,传递的参数其实是实际参数的一份拷贝,而不是真正的实际参数。在 Lua 中,函数的形参可以没有,也可以有任意多个。
optional_function_scope function function_name(argument1, argument2..., argumentn)
function_body
return result_params_comma_separated
end
参数 | 描述 |
---|---|
optional_function_scope | 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。 |
function_name | 函数名。 |
argument1 | 函数参数,多个参数以逗号隔开,函数也可以不带参数。 |
function_body | 函数体,函数中需要执行的代码语句块。 |
result_params_comma_separated | 函数返回值,Lua 语言函数可以返回多个值,每个值以逗号隔开。 |
这里的 argument1, argument2 等就是函数参数,如果没有任何函数参数,括号里面什么都不用写。
用函数,实现寻找两个数的最大公约数
#!/usr/bin/lua
print("haicoder(www.haicoder.net)\n")
function gcdNormal(number1, number2)
local intTemp = 1
if number2 < number1 then
intTemp = number2
number2 = number1
number1 = intTemp
end
while (number1 ~= 0) do
intTemp = number2 % number1
number2 = number1
number1 = intTemp
end
return number2
end
result = gcdNormal(10, 20)
print(string.format("gcdNormal = %d", result))
程序运行后,控制台输出如下:
我们定义了一个函数 gcdNormal,传入两个参数 a 和 b,函数返回一个两个参数的最大公约数。这里我们使用了穷举法实现了求参数 a 和 参数 b 的最大公约数的逻辑。
Lua 的函数参数是函数参数,对函数参数的修改不会影响实参
#!/usr/bin/lua
print("haicoder(www.haicoder.net)\n")
function change(a)
a = 1000
end
a = 100
change(a)
print(string.format("a = %d", a))
程序运行后,控制台输出如下:
我们定义了一个函数 change(),传入一个参数 a,在函数体中,直接对参数进行重新赋值。最后,调用该函数,并传入变量 a,执行完 change() 函数之后,我们再次打印变量 a 的值,发现 a 的值还是 100,并没有发送改变。
因为在 Lua 中,函数的参数是形式参数,即是实参的拷贝,所以修改的不是实参,所以 a 的值不会改变。
Lua 中函数的参数,为形式参数,即如果我们通过传值的方式,传递的参数其实是实际参数的一份拷贝,而不是真正的实际参数。在 Lua 中,函数的形参可以没有,也可以有任意多个。