可变参节点的实现机理
可变参节点的实现机理
本文档基于泛型与变参进行一些关于可变参数(variadics)机制的讲解。
参数展开
开发者只需要定义可变参节点的表层含义,相当于只实现了第一层元级(也就是可变参数只有一个或者一组)。更多数量可变参数的节点版本由系统自动的生成。
在每次编译过程中,系统会将所有的可变参节点替换为确定参数数量的普通节点。这些替换节点大体上看起来如下所示:
这个参数展开过程很像函数式编程里的 reduce/fold
操作。
多元变参
上面这个例子里只有一个可变参数,但是现实中也存在很多需要多个可变参数的情形,我们称之为多元变参。
系统内置的基础节点 select
就是这样的一个两元变参结构。每次我们拖动 select
节点右边的小把手,它会两个两个的增加输入参数。
每增加一组参数,我们称之为该节点增加了一个元级(Arity step)。
多元变参节点的展开过程如下所示:
共享端口
一个可变参节点中不属于可变参数的其他端口(在可变参数的左侧)被称为共享端口,因为它们会被展开后的所有节点共享。
以一个用于连接多个字符串的可变参节点 join
为例,对应到分隔符的输入端口 IN8
就是一个共享端口。
这个例子里只有一个共享端口,而事实上共享端口可以不止一个。
Loading...