Rocket

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
 
节点实例化方法:
 
原文地址:https://www.cnblogs.com/wjcdx/p/10466157.html