any 和 all
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 63 课,共 78 课。
any() 和 all() 会针对整个数组提出一个是或否的问题。它们都接受一个函数,该函数会针对单个元素返回 true 或 false:
- 如果函数对至少一个元素返回
true,any()就会返回true。 - 如果函数对每个元素都返回
true,all()就会返回true。
var enemy_hp = [30, 0, 12]
print(enemy_hp.any(func(hp): return hp == 0))
print(enemy_hp.all(func(hp): return hp > 0))true
false一个敌人有 0 点生命值,所以 any() 为 true,而同一个敌人会让 all() 为 false。
两者都会在确定答案后立即停止:any() 遇到第一个 true 时停止,all() 遇到第一个 false 时停止。它们也适用于具名函数,例如 numbers.all(is_even)。
对于空数组,any() 返回 false,因为没有元素通过条件;all() 返回 true,因为没有元素不满足条件。
在条件中使用它们,代替使用标志变量的循环:
var inventory = ["sword", "key", "rope"]
if inventory.any(func(item): return item == "key"):
print("The door opens")挑战
简单程序会读取一行用逗号分隔的分数,并将它们存储在数组 numbers 中。这部分已经写好。
输出两行:
Any perfect:后面跟着true,如果至少有一个分数是100;否则跟着falseAll passed:后面跟着true,如果每个分数都大于或等于50;否则跟着false
第一行使用 any(),第二行使用 all()。输入 100,75,40 时,输出为:
Any perfect: true
All passed: false亲手试试
extends Node
func _ready():
var numbers := []
for part in OS.read_string_from_stdin().split(","):
numbers.append(int(part))
# 用 any() 和 all() 输出这两行
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器