Dart通过传递函数来简化代码结构,通过typedef来表达更清晰的语义.
//Element
RenderObject get renderObject {
RenderObject result;
void visit(Element element) {
assert(result == null); // this verifies that there is only one child
if (element is RenderObjectElement)
result = element.renderObject;
else
element.visitChildren(visit);
}
visit(this);
return result;
}
//ComponentElement
@override
void visitChildren(ElementVisitor visitor) {
if (_child != null)
visitor(_child);
}
typedef ElementVisitor = void Function(Element element);
注意Element.renderObject.visit不仅仅表示java中的单函数内部类,它包含成员变量RenderObject result,更类似一个正常的类实现了ElementVisitor这个接口,visitChildren也不是传递的一个空类,而是一个对象.