可变参节点的实现机理


可变参节点的实现机理

本文档基于泛型与变参进行一些关于可变参数(variadics)机制的讲解。

参数展开

开发者只需要定义可变参节点的表层含义,相当于只实现了第一层元级(也就是可变参数只有一个或者一组)。更多数量可变参数的节点版本由系统自动的生成。

在每次编译过程中,系统会将所有的可变参节点替换为确定参数数量的普通节点。这些替换节点大体上看起来如下所示:

variadics-expansion

这个参数展开过程很像函数式编程里的 reduce/fold 操作。

多元变参

上面这个例子里只有一个可变参数,但是现实中也存在很多需要多个可变参数的情形,我们称之为多元变参。

系统内置的基础节点 select 就是这样的一个两元变参结构。每次我们拖动 select 节点右边的小把手,它会两个两个的增加输入参数。

variadics-arity-select

每增加一组参数,我们称之为该节点增加了一个元级(Arity step)

多元变参节点的展开过程如下所示:

variadics-expansion-select

共享端口

一个可变参节点中不属于可变参数的其他端口(在可变参数的左侧)被称为共享端口,因为它们会被展开后的所有节点共享。

以一个用于连接多个字符串的可变参节点 join 为例,对应到分隔符的输入端口 IN8 就是一个共享端口。

variadics-shared-pins

这个例子里只有一个共享端口,而事实上共享端口可以不止一个。

上次编辑于: 2022/12/17 07:45:59
Loading...