Dart - 需要解释库/零件和导入/导出

use*_*675 5 dart

是的,我在同一个文件中阅读了dart 导入和部分指令

我有这个结构:

  • 库/
    • 来源/
      • 一/
        • SomeClass.dart
        • 一.dart
    • mylib.dart
  • main.dart

我正在尝试实现这种行为:

  1. 所有公共和隐藏变量都可以在库内完全访问。
  2. main.dart 可以访问库中的所有公共变量。

有一个问题。由于某些奇怪的原因,我不能使用任何带有“part of”的指令。所以我不能在one.dart

part of mylib;
import 'SomeClass.dart';

//somecode
Run Code Online (Sandbox Code Playgroud)

所以,我要么需要移动类定义从SomeClass.dartone.dart(这将使代码的可读性和混淆),或者我需要在移动“进口” mylib.dart

library mylib;
import 'SomeClass.dart';
part ..
Run Code Online (Sandbox Code Playgroud)

我不喜欢这两种选择。在第二种情况下,我需要解析所有模块并移动导入/导出。这肯定会破坏某些东西。

听起来可能很奇怪,但该项目将自动从各种模块构建。并且one/是其中之一。

这个应用程序设计很糟糕,我知道。但是要么我需要找到更好的方法,要么只是公开所有变量而不要打扰。

小智 12

默认为每个文件定义一种类型,不使用part,并且仅导入您需要的文件。这涵盖了大多数用例。

现在,假设您有两种通常一起使用的类型 - 例如, aThing和 aThingExceptionThing做坏事时被抛出。随处导入这两个文件很乏味,因此您有三个选项,但要权衡利弊:

  1. 在同一个文件中声明这两种类型
  2. 在自己的文件中声明每种类型,并让“主要”文件导出另一个. 所以,thing.dart出口thing_exception.dart。导入thing.dart使导入文件可以访问两者。
  3. 在自己的文件中声明每种类型,并使另一个文件成为主文件的“一部分”。所以,thing_exception.dart声明它是 'part of' thing.dart。导入thing.dart使导入文件可以访问这两个文件。

对于这种简单类型及其例外情况,最好的办法是使用选项 1。当代码量增加或两种类型的可见性不同时,此选项的吸引力就会降低。这使得选项 2 和 3 摆在桌面上。

当您有单独的文件时,选项 2 通常比选项 3 更好,因为您保持了一定的灵活性 - 您只能导入thing_exception.dart而不是thing.dart. 如果您使用选项 3,则无法执行此操作 - 您要么导入所有部件,要么不导入它们。这是您在尝试执行零件并在同一文件中导入时看到的错误。

当您的代码在两个文件中高度依赖彼此并且它们需要能够访问彼此的私有成员时,选项 3 变得有价值。这种情况比较少见。

当您将一堆这样的文件放在一起时,它就变成了更传统意义上的“库”。您声明一个导出文件的主库文件(您的my lib.dart文件):

export 'public.dart';
export 'other_public.dart';
Run Code Online (Sandbox Code Playgroud)

bin脚本将库作为一个整体导入,但它看不到任何未从my_lib.dart.

import 'package:mylib/mylib.dart';
Run Code Online (Sandbox Code Playgroud)

这是一个小包的例子,它结合了所有这三个选项,作为一个很好的参考。


Arg*_*tus 1

import我认为使用, 和export会更幸运showpart of(现在不鼓励使用。)

这个问题的答案可能对您有帮助:何时在 Dart 中使用部分/部分与导入/导出?

还有创建库包文档:https://www.dartlang.org/guides/libraries/create-library-packages