https://mp.weixin.qq.com/s/eOgNLi_MJ8HJOpepGaaW8Q
简单介绍BaseNode的实现。
1. You cannot create a node outside a LazyModule
LazyModule.scope在LazyModule对象中定义:
在LazyModule类中赋值:
那么这里的“outside a LazyModule”中的LazyModule指的应该是LazyModule类,而不是LazyModule伴生对象。
因为LazyModule对象的用法,所以这里很容易误解:
可以从两个方面排除:
a. LazyModule伴生对象只有一个,应该用“outside the LazyModule(...)”,而不是"outside a LazyModule";
b. LazyModule对象工厂方法定义如下:
这里的bc是LazyModule的子类,而不是BaseNode。所以LazyModule伴生对象实际上与BaseNode的实例化无关。
所以正确的方法是:
NullIntSource继承自LazyModule类,所以在实例化NullIntSource时,首先执行LazyModule的构造方法,为LazyModule.scope赋值;
然后在NullIntSource中创建intnode成员,执行BaseNode的构造方法,判断LazyModule.scope是否Defined。
2. add to lazyModule.nodes
把当前正在实例化的BaseNode,加入到当前的lazyModule中。
使用index记录当前节点在lazyModule.nodes中的序号:
3. serial
定义于BaseNode伴生对象中:
用于记录当前节点在所有已创建过的节点中的序号:
4. parents
lazyModule是当前节点的parents之一。
5. name
全路径名称(full qualified name),包括从顶层父节点逐层到本节的的所有名称:
6. omitGraphML
是否要画在GraphML图中:
如果没有输入输出连接,而是一个孤立的节点则忽略。
7. wirePrefix
使用正则表达式调整节点名称的格式。
8. inputs/outputs
记录渲染过的输入和输出连接信息:
9. sinkCard/sourceCard
记录输入端星号("*")的个数和输出端星号的个数。
10. flexes
记录BIND_FLEX连接的对端连接的节点信息。
11. instantiate
节点实例化方法: