Dart中external是什么意思

6tqwzwtp  于 2023-07-31  发布在  其他
关注(0)|答案(6)|浏览(138)

external在Dart中是什么意思?举例来说:external DateTime._now();
我是Dart的新手,我找不到external的文档,所以你能给予个例子来帮助解释吗?

lyr7nygr

lyr7nygr1#

9.4外部功能
外部函数是其主体与其
宣言。外部函数可以是顶级函数(17)、方法(18)、或其他类型的函数。
函数体在其他地方定义。
据我所知,这是用来修复Dart VM在浏览器和服务器上的不同实现。

kx7yvsdv

kx7yvsdv2#

当我们在一个类中创建一个外部函数时,比如toString()

external String toString();

字符串
这意味着这个方法是抽象的,父类的子类将添加函数体,这是因为在Dart中我们只能创建一个抽象类。
总结:
外部函数=非抽象类中的抽象函数

axkjgtzd

axkjgtzd3#

我不认为external关键字是用来将方法标记为抽象的,即使可能
在抽象类中保留一个没有实现的方法就足够了
它相当于TypeScript中的declare和C#中的extern,它们用于与其他运行时的互操作性,这意味着你告诉编译器“不要担心这个方法的实现,我保证它会在运行时存在”,运行时可能是C或JavaScript或其他语言

pu3pd22g

pu3pd22g4#

如果你想知道为什么或者在哪里应该使用external关键字,这里是Flutter的另一个例子。

class MyStruct extends Struct {
  @Int32()
  external int a;

  @Float()
  external double b;

  external Pointer<Void> c;
}

字符串
有时候,但不经常在使用本机库时使用,在本例中使用Struct访问内存中的本机结构体字段。在Struct下,我们必须将所有字段声明为external,因为它将是dart:ffi(C / C++)的外部字段。
因此,external不仅仅是声明“抽象方法”的方式。

hgb9j2n6

hgb9j2n65#

9.4外部函数外部函数是一个函数,其主体与其声明分开提供。
这意味着您定义了函数,但没有实现。这就是你定义抽象方法的方式,但唯一的区别是,使用external,你不用dart实现方法,而是用C或其他语言实现。
类似于String类的东西,它可以被认为是外部函数,除了String类用@pragma('vm:entry-point')标记,这使得整个类使用本机代码。
请看下面的例子来理解:

这 dart 的一边

https://github.com/dart-lang/sdk/blob/main/sdk/lib/core/string.dart#L711

这是C++中的实现。

https://github.com/dart-lang/sdk/blob/main/runtime/lib/string.cc#L473-#L478

xoshrz7s

xoshrz7s6#

在我看来,它相当于Java native关键字。例如,由于当前时间毫秒在Android,iOS,Linux等上的实现方式不同,因此DateTime.now().millisecondsSinceEpoch将在运行时链接到不同的实现。因此,最初并不知道这种方法会是什么样子。因此,它被标记为external,意味着它依赖于平台。

相关问题