跳到主要内容

函数高级用法

函数可以执行一系列操作并可能返回一个值。但函数的应用范围并非仅限于执行和返回,还可以创造出更多灵活的用法。

函数作为“一等公民”

所谓“一等公民”,就是这种类型可以作为参数传递,从函数返回,修改并分配给变量。以字符串为例,字符串可以作为一个变量,可以作为参数传递进函数内,也可以从函数中返回。

星火编辑器也将函数作为一等公民看待,这意味着函数可以像变量一样赋值(引用)、传参、作为函数的返回值,也可以在此基础上尝试函数的更多用法。

将函数作为变量

可以在局部变量和全局变量中选择『函数』类型,将相同参数和返回值的函数赋值到该变量,并在动作语句中执行该函数变量。

要执行该函数变量的函数,需要在动作中选择“基于变量”,点击该变量右侧的▶按钮,并选择括号语句。

如果想添加该参数变量的参数,右键点击类型中两个字,选择添加参数,在新创建出来的参数中选择类型。

将函数作为参数

函数本身也可以当做函数的参数传递,在函数中可以调用这个参数函数。

该用法的一个常见案例就是数组排序函数的排序规则函数(比较函数),详情可参考排序函数文档

将函数作为返回值

例:测试函数返回了一个新的函数,在外部执行测试函数,后执行返回出来新的函数。

匿名函数

在星火编辑器中,除了正常有函数名的函数,还有一类无需定义函数名的函数,它们叫作匿名函数。

匿名函数经常被作为回调函数使用。回调函数是一个类型为函数的参数,在程序的执行过程中可以随时调用这个参数函数。回调函数应用广泛,例如云变量操作的成功/失败处理,数组排序等。

添加一个匿名函数可以在窗口中选择立即值-匿名函数,其他操作和上述将函数作为变量的方法相同。

从函数创建触发器

除了正常创建触发器的流程外,触发器也可以通过函数创建出来,从而动态地添加或删除事件,也可以手动指定触发器的开关,达到暂停触发器的目的。

由于星火编辑器中每个触发器都是一个协程,从函数创建触发器就相当于创建了一个新的协程,所以这种方法可以解决"cannot wrap coroutine by main thread"之类的报错。

从函数创建触发器的流程如下:

  1. 添加『从函数创建触发器』语句
  2. 向该语句中填入匿名函数参数,编写对应逻辑
  3. 向该触发器添加对应事件

完整触发器示例如下: