gpt4 book ai didi

Dart - 需要库/部分和导入/导出的解释

转载 作者:行者123 更新时间:2023-12-02 21:11:06 30 4
gpt4 key购买 nike

是的,我读过dart import and part of directives in same file

我有这样的结构:

  • 库/
    • src/
      • 一个/
        • SomeClass.dart
        • one.dart
    • mylib.dart
  • main.dart

我正在尝试实现此行为:

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

有问题。由于某些奇怪的原因,我无法将任何指令与“部分”一起使用。所以我不能在 one.dart 中使用它:

part of mylib;
import 'SomeClass.dart';

//somecode

因此,我要么需要将类定义从 SomeClass.dart 移动到 one.dart (这将使代码可读性较差且困惑),或者我需要移动在 mylib.dart 中“导入”。

library mylib;
import 'SomeClass.dart';
part ..

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

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

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

最佳答案

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

现在,假设您有两种通常一起使用的类型 - 例如,一个 Thing 和一个 ThingException,当 Thing 时抛出该异常> 做坏事。在任何地方导入这两个文件都是乏味的,因此您有三个选项,各有优缺点:

  1. 在同一文件中声明这两种类型
  2. 在自己的文件中声明每种类型,并让“主”文件导出其他类型。因此,thing.dart 导出 thing_exception.dart。导入 thing.dart 使导入文件能够访问这两者。
  3. 在自己的文件中声明每种类型,并让其他文件成为主文件的“一部分”。因此,thing_exception.dart 声明它是“'thing.dart 的一部分。导入 thing.dart 使导入文件能够访问这两个文件。

对于这种简单类型及其异常(exception),最好的选择是使用选项 1。当代码量增加或两种类型的可见性出现差异时,此选项的吸引力就会降低。这使得选项 2 和 3 摆在桌面上。

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

当代码位于两个文件中并且彼此高度依赖并且它们需要能够访问彼此的私有(private)成员时,选项 3 就变得很有值(value)。这种情况不太常见。

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

export 'public.dart';
export 'other_public.dart';

bin 脚本将库作为一个整体导入,但它看不到任何未从 my_lib.dart 显式导出的内容。

import 'package:mylib/mylib.dart';

Here's an example of a smallish package将所有这三个选项一起使用作为一个很好的引用。

关于Dart - 需要库/部分和导入/导出的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480039/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com