Dart的外部含义是什么?

幕阜山*_*山道友 11 dart

externalDart是什么意思?例如:external DateTime._now();

我是Dart的新手,找不到的文档external,所以您可以举一个示例进行说明吗?

Min*_*mir 13

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

external String toString();
Run Code Online (Sandbox Code Playgroud)

意味着这个方法是抽象的,父类的子类会添加函数体,这是因为在Dart中我们只能创建一个抽象类。

概括:

外部函数 = 非抽象类中的抽象函数


Gün*_*uer 11

9.4外部函数
外部函数是其主体与其
声明分开提供的函数。外部函数可以是顶级函数(17),一种方法

函数的主体在其他地方定义。
据我所知,这用于修复浏览器中Dart VM和服务器上Dart VM的不同实现。

  • 我可以通过在源代码中搜索相关的关键字来定位实现了外部功能的文件。但是,如果我可以从编辑器中获取实现,那将更加方便。 (3认同)
  • 它主要用于抽象 Dart VM 和 dart2js 之间的实现细节。 (2认同)
  • 如何找到外部方法的实现? (2认同)

Moh*_*lim 10

我不认为external关键字是用来将方法标记为抽象的,即使这是可能的

在抽象类中留下一个没有实现的方法就足够了,将其设置为抽象的

它相当于declareTypeScript 中的,而extern在 C# 中,它们用于与其他运行时的互操作性,这意味着你告诉编译器“不要担心这个方法的实现,我保证它会在运行时存在”,运行时可能会用 C 或 Javascript 或其他语言编写


jus*_*uka 6

如果您想知道为什么或在哪里应该使用external关键字,这里还有一个 Flutter 示例。

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

  @Float()
  external double b;

  external Pointer<Void> c;
}
Run Code Online (Sandbox Code Playgroud)

有时,但不经常,当您使用本机库时,在本例中是Struct访问内存中本机结构的字段。Struct在“我们必须将所有字段声明为”下external,因为它将是来自dart:ffi(C / C++) 的外部字段。

因此,external这不仅仅是声明“抽象方法”的方式。


Tal*_*ick 5

9.4 外部函数 外部函数是指其主体与其声明分开提供的函数。

这意味着您定义了该函数,但没有实现。这正是定义抽象方法的方式,但唯一的区别是,使用 external 时,您不会在 dart 中实现该方法,而是在 C 或其他语言中实现。

像 String 类这样的东西可以被视为外部函数,除了它用 @pragma('vm:entry-point') 标记的 String 类,这使得整个类使用本机代码。

请看下面的例子来理解:

这个飞镖的侧面。

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