love2d-chapter3-functions

love2d-chapter3-functions

十月 02, 2020

第三章-函数

我们可以用函数储存一段代码,这样我们就可以在需要时执行这段代码。函数也称为方法。
有两个办法来创建函数:

1
2
3
example = function ()
print("Hello World!")
end

以及更常见的:

1
2
3
function example()
print("Hello World!")
end

要创建函数,用保留字function开头,后面跟着函数名。在lua中,函数是“一等公民”,或者说函数也是一种变量。这意味了很多事情,但是在目前,你只要知道,这意味着变量的命名原则同样适用于函数。上面的例子里的函数名为example。在函数名的后面要加上一对括号()(注意是半角括号)。现在我们可以开始编写函数内容了——也就是你想要这个函数储存的那段代码。在本例中,我们放进去了print("Hello World!")。编写完成后,我们用保留字end表示函数结束。
但是,当你执行上面的代码时,你将不会看到”Hellow World!”出现在你的控制台里。这是因为我们只是创建了这个函数,而没有执行它。我们像这样执行一个函数:

1
2
example()
--输出:"Hello World!"

你只要输入一个函数名,跟着一对括号,这样你就执行了一个函数,我们把这个叫做函数调用。

参数

看看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function sayNumber(num)
print("I like the number " .. num)
end

sayNumber(15)
sayNumber(2)
sayNumber(44)
sayNumber(100)
print(num)
--Output:
--"I like the number 15"
--"I like the number 2"
--"I like the number 44"
--"I like the number 100"
--nil

在括号里我们可以加入参数。参数是一种只存在于函数内的零时变量。这本例中,参数是num。我们可以像使用其他变量一样使用num
我们多次调用了这个函数,每次传递了不同的参数。然后你会看到每次输出的都是同一个句子,但是数字不同。我们把放到括号里的那个数字叫做实参,想对应的,我们把创建函数时的那个num叫做形参。你可以把形参理解为仅在函数内部有效的一个变量,当具体的函数调用发生时,实参的值被赋给形参。
在末尾我们试图让程序输出sayNumber函数的形参——num的值。结果程序输出了nil。这意味着num没有任何值,或者说,num不存在。正如之前说的,形参只在函数内部有效。

返回值

函数可以返回值。我们可以用变量储存函数返回的值。你可以在函数里用return返回值。

1
2
3
4
5
6
7
function giveMeFive()
return 5
end

a = giveMeFive()
print(a)
--Output: 5

a存储了giveMeFive()返回的值。
来看另一个例子:

1
2
3
4
5
6
7
8
-- 多个参数用逗号(半角逗号)分隔
function sum(a, b)
return a + b
end

print(sum(200, 95))
--Output:
--295

sum()函数返回ab的和的值。我们不需要把函数返回的值先用一个变量存储起来。我们可以直接打印返回的值。

用途

在实际工作中,你会希望在不同的地方运行同样的代码。有了函数,我们就可以通过函数调用的方式来运行这些代码,而不是每次都要复制粘贴。有时你可能还想要修改这些代码的行为。有了函数,我们只需要修改一次(在函数创建的地方)。我们用函数来实现代码复用。Don’t repeat yourself,这是一个编程准则。