Dart语法观察

312 阅读1分钟

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也不是传递的一个空类,而是一个对象.