簡體   English   中英

Dart 中的外部是什么意思?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM