external在Dart中是什么意思?举例来说:external DateTime._now();个我是Dart的新手,我找不到external的文档,所以你能给予个例子来帮助解释吗?
external
external DateTime._now();
lyr7nygr1#
9.4外部功能外部函数是其主体与其宣言。外部函数可以是顶级函数(17)、方法(18)、或其他类型的函数。函数体在其他地方定义。据我所知,这是用来修复Dart VM在浏览器和服务器上的不同实现。
kx7yvsdv2#
当我们在一个类中创建一个外部函数时,比如toString()
toString()
external String toString();
字符串这意味着这个方法是抽象的,父类的子类将添加函数体,这是因为在Dart中我们只能创建一个抽象类。总结:外部函数=非抽象类中的抽象函数
axkjgtzd3#
我不认为external关键字是用来将方法标记为抽象的,即使可能在抽象类中保留一个没有实现的方法就足够了它相当于TypeScript中的declare和C#中的extern,它们用于与其他运行时的互操作性,这意味着你告诉编译器“不要担心这个方法的实现,我保证它会在运行时存在”,运行时可能是C或JavaScript或其他语言
declare
extern
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不仅仅是声明“抽象方法”的方式。
Struct
dart:ffi
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
xoshrz7s6#
在我看来,它相当于Java native关键字。例如,由于当前时间毫秒在Android,iOS,Linux等上的实现方式不同,因此DateTime.now().millisecondsSinceEpoch将在运行时链接到不同的实现。因此,最初并不知道这种方法会是什么样子。因此,它被标记为external,意味着它依赖于平台。
native
DateTime.now().millisecondsSinceEpoch
6条答案
按热度按时间lyr7nygr1#
9.4外部功能
外部函数是其主体与其
宣言。外部函数可以是顶级函数(17)、方法(18)、或其他类型的函数。
函数体在其他地方定义。
据我所知,这是用来修复Dart VM在浏览器和服务器上的不同实现。
kx7yvsdv2#
当我们在一个类中创建一个外部函数时,比如
toString()
字符串
这意味着这个方法是抽象的,父类的子类将添加函数体,这是因为在Dart中我们只能创建一个抽象类。
总结:
外部函数=非抽象类中的抽象函数
axkjgtzd3#
我不认为
external
关键字是用来将方法标记为抽象的,即使可能在抽象类中保留一个没有实现的方法就足够了
它相当于TypeScript中的
declare
和C#中的extern
,它们用于与其他运行时的互操作性,这意味着你告诉编译器“不要担心这个方法的实现,我保证它会在运行时存在”,运行时可能是C或JavaScript或其他语言pu3pd22g4#
如果你想知道为什么或者在哪里应该使用
external
关键字,这里是Flutter的另一个例子。字符串
有时候,但不经常在使用本机库时使用,在本例中使用
Struct
访问内存中的本机结构体字段。在Struct
下,我们必须将所有字段声明为external
,因为它将是dart:ffi
(C / C++)的外部字段。因此,
external
不仅仅是声明“抽象方法”的方式。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
xoshrz7s6#
在我看来,它相当于Java
native
关键字。例如,由于当前时间毫秒在Android,iOS,Linux等上的实现方式不同,因此DateTime.now().millisecondsSinceEpoch
将在运行时链接到不同的实现。因此,最初并不知道这种方法会是什么样子。因此,它被标记为external
,意味着它依赖于平台。