Menu
CoddyTech

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 内给它赋值也不会改变外部的变量。

challenge icon

挑战

简单

程序会读取一个整数。创建一个 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 作为参数调用它,并打印结果
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器