在DART中使用库时,我不完全理解part/part ofimport/export之间的区别.例如:

one.dart:
library one;
part "two.dart";
Class One {
};

two.dart:
part of one;
import 'somefile.dart';
Class Two {
}

library one;
import 'two.dart';
Class One {
}

library two;
import 'somefile.dart';
export 'somefile.dart';
Class Two {
}

Both scenarios seem to do the same thing. When is it advantageous to use partpart of rather than import? And are there scenarios where import will not work, but partpart of will?

推荐答案

update 2018/03

最近,partpart of越来越多地用于代码生成场景(而不是过时的转换器),而且不太可能很快消失.

built_valuejson_serializable和其他许多包都依赖于它.

不受欢迎的只是这样一种模式,即通过将一个库文件和所有其他文件作为该库的一部分,将软件包的所有文件绑定到单个库.

original

在Dart中,私有成员可以在同一个库中访问.使用import可以导入一个库,并且只能访问其公共成员.使用part/part of,您可以将一个库拆分为多个文件,这些文件中的所有代码都可以访问私有成员.

see clarifications to below paragraph in above update

不鼓励使用part/part of,DART团队正在考虑取消它.我假设他们会引入类似"Friend"(https://github.com/dart-lang/sdk/issues/22841)的东西,在终止part/part of(可能在future 的DART版本中)之前,两个库可以相互访问对方的私有成员作为替代.

Dart相关问答推荐

从扩展类访问抽象类属性

根据 Id 比较两个不同的 List

Dart/Flutter ffi(外部函数接口)本机回调,例如:sqlite3_exec

MappedListIterable 不是子类型

如何使用新的流 API 在 Dart 中注册自定义事件

需要一个SkDeletable类型的值,但得到一个Null类型的值

如何从 Flutter App 连接 Ms SQL?

Flutter:并非所有本地化代表都支持应用程序的语言环境

将JSON映射到类对象

使用where在对象列表中搜索 dart 中的特定对象

Flutter模糊叠加

给 initState 内部的变量赋值或不在 Flutter StatefulWidget 中赋值有什么区别?

如何使用flatter删除Firestore文档中的字段

Flutter:按下按钮时播放声音

VS Code 首选项的位置

列表的反向迭代器?

如何使用 Dart 列出目录的内容?

如何判断一个对象是否是一个类的实例

dart中的动态和对象有什么区别?

Dart null / false / empty checking:如何写这个更短?