Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

func: Wasm-Referenzanweisung

Die ref.func-Referenzanweisung erstellt eine Referenz auf eine bestimmte Funktion.

Probieren Sie es aus

(module
  (func $double (param i32) (result i32)
    (i32.mul (local.get 0) (i32.const 2))
  )
  ;; Make $double referenceable by ref.func
  (elem declare func $double)

  (func (export "getDouble") (result funcref)
    ref.func $double
  )
)
const url = "{%wasm-url%}";
const { instance } = await WebAssembly.instantiateStreaming(fetch(url));

// The returned funcref can be called like a JavaScript function
const double = instance.exports.getDouble();
console.log(double(21));

WAT-Syntax

ref.func function
ref.func

Die ref.func-Anweisung.

Unmittelbare Operanden

function

Die Funktion, auf die eine Referenz erstellt werden soll. Dies kann der Name der Funktion sein, zum Beispiel $my_function, oder ihr Index.

Operandenstapel

[] -> [output:(ref function_type)]
output

Eine nicht leere Referenz auf function. Ihr Typ ist eine Referenz auf den Typ der Funktion. Sie kann überall verwendet werden, wo ein funcref erwartet wird.

Binärkodierung

Anweisung Binärformat Beispiel: Text => Binärdarstellung
ref.func 0xd2 x:func_idx ref.func 0 => 0xd2 0x00

Beschreibung

Die ref.func-Anweisung erstellt eine Referenz auf eine Funktion, die im Modul definiert oder in das Modul importiert wurde. Sie können die Referenz in einer Tabelle speichern, an eine andere Funktion übergeben oder an JavaScript zurückgeben. Dort kann sie wie eine gewöhnliche JavaScript-Funktion aufgerufen werden.

Ein Modul wird nur dann erfolgreich validiert, wenn jede Funktion, die mit ref.func innerhalb eines Funktionskörpers verwendet wird, auch an einer Stelle außerhalb der Funktionskörper referenziert wird: beispielsweise in einem Export, einem Initialisierer für global oder einem elem-Segment. Wenn eine Funktion nicht anderweitig referenziert wird, können Sie sie mit einem deklarativen elem-Segment deklarieren, etwa mit (elem declare func $my_function).

Da ref.func eine konstante Anweisung ist, kann sie auch in konstanten Ausdrücken verwendet werden, beispielsweise als Initialisierer für global oder als Eintrag in einem elem-Segment.

Spezifikationen

Spezifikation
WebAssembly Core Specification
# -hrefsyntax-instr-refmathsfreffuncx

Browser-Kompatibilität

Siehe auch