Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 是否可以初始化库?_Dart - Fatal编程技术网

Dart 是否可以初始化库?

Dart 是否可以初始化库?,dart,Dart,我正在试用新的飞镖FFI为利伯纳制作包装纸。libnaid需要通过调用init()来初始化。但我认为用户不应该为记住这一点而感到负担,我也不想检查一些全局状态变量 我知道Go有packageinit()函数,在包含包时运行这些函数。Dart中有类似的东西吗 当然,我可以将所有内容封装到一个类中,然后在构造函数中运行init(),但是建立一个基本上只公开静态方法的类没有多大意义。此外,我想保留LibNaude的程序风格 当然,我可以将所有内容封装到一个类中,并在构造函数中运行init(),但是安装

我正在试用新的飞镖FFI为利伯纳制作包装纸。libnaid需要通过调用
init()
来初始化。但我认为用户不应该为记住这一点而感到负担,我也不想检查一些全局状态变量

我知道Go有package
init()
函数,在包含包时运行这些函数。Dart中有类似的东西吗

当然,我可以将所有内容封装到一个类中,然后在构造函数中运行
init()
,但是建立一个基本上只公开静态方法的类没有多大意义。此外,我想保留LibNaude的程序风格

当然,我可以将所有内容封装到一个类中,并在构造函数中运行init(),但是安装一个基本上只公开静态方法的类没有多大意义。此外,我想保留LibNaude的程序风格

您可以有一个单例实例,并将库函数作为实例上的方法公开,还可以提供一个自动进行初始化的公共getter函数

例如,类似于:

libu实例;
libnadium获取libnadium=>instance???=libnadium.uz();
类锂钠{
锂钠{
//进行初始化。
}
void foo(){…}
无效条(){…}
}
然后呼叫者需要通过以下方式使用它:

导入'libnaid.dart';
lib.foo();

这将隐藏类实例化,并且对于调用方来说,与仅使用具有名称空间的顶级函数(将'libnaid.dart'导入为libnaid)没有任何不同。

dart无法隐式运行代码。在
main
之前没有代码运行,在
main
之后运行的所有代码都会这样做,因为它是直接或间接从
main
方法调用的。所以,不

如果您需要初始化某些内容,有许多选项

  • 您可以使用延迟初始化的静态变量:

    var _initialState = _init();
    int doSomething(arguments) {
      _initialState;
      do the something.
    }
    
    读取
    \u initialState
    将确保第一次调用
    init
    这是需要的,而不是在那之后。你甚至可以把东西存放在州里以备不时之需 以后使用

  • @jamesdlin建议的单例实现对象。它基本上做到了 同样,然后将方法放在对象上,而不是静态的。 另一个变体就是这样做,但是使用一个私有实例,并具有 公共顶级函数转发到singleton对象。然后你得到了 过程API,仍然确保状态对象已初始化。 (这可能更适合测试,允许多个状态对象处于活动状态 同时)

  • 要求人们调用
    init