Lambda 函数第 2 部分
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 55 课,共 78 课。
单行 lambda 可以使用三元运算符来选择结果,value_if_true if condition else value_if_false:
var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # Adult对于两个以上的情况,可以在 else 后再串联一个三元表达式,或者将 lambda 写成包含 if 和 elif 的代码块:
var grade = func(score):
if score == 100:
return "Perfect"
elif score >= 60:
return "Pass"
return "Fail"
print(grade.call(75)) # Pass因为 lambda 是一个值,你可以把它传递给函数。将参数声明为 Callable 类型,然后用 call() 运行它:
func apply_twice(fn: Callable, value):
return fn.call(fn.call(value))print(apply_twice(func(n): return n + 3, 1)) # 7命名函数也可以用同样的方式传递:像 apply_twice(double, 5) 这样,不带括号写出它的名称。
内置方法也可以接收函数。sort_custom() 会使用一个接收两个元素的 lambda 对数组排序,并在第一个元素必须排在前面时返回 true:
var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]lambda 可以读取周围的局部变量,但会在创建时复制它们的值。之后更改这类变量不会影响 lambda,在 lambda 内给它赋值也不会改变外部的变量。
挑战
简单程序会读取一个整数。创建一个 lambda,并将它存储在名为 categorize_number 的变量中。它接收一个数字并返回:
- 如果数字大于
0,则返回Positive - 如果数字是
0,则返回Zero - 如果数字小于
0,则返回Negative
用你读取的数字调用它,并打印结果。输入 10 时,输出为:
Positive亲手试试
extends Node
func _ready():
var number := int(OS.read_string_from_stdin())
# 在这里创建 lambda 函数 categorize_number
# 用 number 作为参数调用它,并打印结果
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器