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)]
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 |