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

View in English Always switch to English

select: Wasm Text-Instruktion

Die select-Instruktion wählt eine ihrer ersten beiden Operanden basierend darauf aus, ob ihr dritter Operand null ist oder nicht. Sie weist einige Ähnlichkeiten mit dem ternären Operator in anderen Sprachen auf (z. B. false ? 10 : 20), führt jedoch kein Kurzschluss-Evaluation durch. Der Instruktion kann ein sofortiger Werttyp folgen: select (result T). select (result T) verwendet einen anderen binären Opcode und erlaubt Typen, die jenseits der von der WebAssembly MVP eingeführten (i32, i64, f32, f64) sind, beispielsweise ermöglicht sie die Auswahl zwischen zwei externref-Werten.

Probieren Sie es aus

(module
  (func (export "select_simple") (result i32)
    ;; load two values onto the stack
    i32.const 10
    i32.const 20

    ;; change to `1` (true) to get the first value (`10`)
    i32.const 0
    select
  )
  (func (export "select_externref") (param $value externref) (param $condition i32) (result externref)
    ;; this is "select t", the explicitly typed variant
    ref.null extern
    local.get $value
    local.get $condition
    select (result externref)
  )
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url)).then((result) => {
  const { select_simple, select_externref } = result.instance.exports;

  console.log(select_simple());
  // Expected output: 20

  // If the second parameter is zero, returns the first parameter (which may be an arbitrary JS value)
  const map = new Map();
  console.log(select_externref(map, 0));
  // Expected output: [object Map]
  console.log(select_externref(map, -1));
  // Expected output: null
});

Syntax

wat
;; push two values onto the stack
i32.const 10
i32.const 20

;; change to `1` (true) to get the first value (`10`)
i32.const 0
select
f32.const nan
f32.const -54.1

;; change to `1` (true) to get the first value (`nan`)
i32.const 0
select (result f32)
Instruktion Binärer Opcode
select 0x1b
select t 0x1c

Spezifikationen

Spezifikation
WebAssembly Core Specification
# -hrefsyntax-instr-parametricmathsfselect-tast%E2%91%A0

Browser-Kompatibilität