[英]What does external mean in Dart?
Dart 中的external
是什么意思? 例如: external DateTime._now();
我是 Dart 新手,我找不到external
的文檔,你能舉個例子來幫助解釋一下嗎?
9.4 外部函數
外部函數是一個函數,它的主體是獨立於它的
宣言。 外部函數可能是頂級函數 (17)、方法
函數的主體在其他地方定義。
據我所知,這用於修復瀏覽器中的 Dart VM 和服務器上的 Dart VM 的不同實現。
當我們在toString()
類的類中創建外部函數時
external String toString();
意味着這個方法是抽象的,父類的子類會添加函數體,這是因為在 Dart 中我們只能創建一個抽象類。
概括:
外部函數 = 非抽象類中的抽象函數
我不認為external
關鍵字是用來將方法標記為抽象的,即使這是可能的
在抽象類中留下一個沒有實現的方法來將其設置為抽象就足夠了
它相當於 TypeScript 中的declare
和 C# 中的extern
,它們用於與其他運行時的互操作性,這意味着你告訴編譯器“不要擔心這個方法的實現,我保證它會在運行時存在”,運行時可能是 C 或 Javascript 或其他
如果你想知道為什么或在哪里使用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
不僅僅是聲明“抽象方法”的方式。
在我看來,它相當於 Java native
關鍵字。 例如,由於當前時間毫秒在 Android、iOS、Linux 等上的實現方式不同, DateTime.now().millisecondsSinceEpoch
將在運行時鏈接到不同的實現。 所以最初並不知道這種方法會是什么樣子。 出於這個原因,它被標記為external
意味着它依賴於平台。
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#L467-#L472
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.