封箱數值切片:Box<[u8]>Box<[i8]>Box<[u16]>Box<[i16]>Box<[u32]>Box<[i32]>Box<[u64]>Box<[i64]>Box<[f32]>Box<[f64]>Box<[MaybeUninit<u8>]>Box<[MaybeUninit<i8>]>Box<[MaybeUninit<u16>]>Box<[MaybeUninit<i16>]>Box<[MaybeUninit<u32>]>Box<[MaybeUninit<i32>]>Box<[MaybeUninit<u64>]>Box<[MaybeUninit<i64>]>Box<[MaybeUninit<f32>]>Box<[MaybeUninit<f64>]>

T 參數 &T 參數 &mut T 參數 T 返回值 Option<T> 參數 Option<T> 返回值JavaScript 表示法
適當類型的 JavaScript TypedArray (Int32ArrayUint8Array 等...)

注意:當將封箱切片返回給 JavaScript 時,切片的內容會從 Wasm 線性記憶體複製到 JavaScript TypedArray 中,反之,當接收 JavaScript TypedArray 作為 Rust 中的封箱切片時也會進行複製。

注意:數值 MaybeUninit<T> 在從 Rust 傳輸到 JS 時以及從 JS 傳輸到 Rust 時,總是會被假定為已初始化。然而,來自 Rust 的未初始化的值可能包含未指定的值。

Rust 用法範例


# #![allow(unused_variables)]
#fn main() {
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn take_boxed_number_slice_by_value(x: Box<[f64]>) {}

#[wasm_bindgen]
pub fn return_boxed_number_slice() -> Box<[u32]> {
    (0..42).collect::<Vec<u32>>().into_boxed_slice()
}

#[wasm_bindgen]
pub fn take_option_boxed_number_slice(x: Option<Box<[u8]>>) {}

#[wasm_bindgen]
pub fn return_option_boxed_number_slice() -> Option<Box<[i32]>> {
    None
}

#}

JavaScript 用法範例

import {
  take_boxed_number_slice_by_value,
  return_boxed_number_slice,
  take_option_boxed_number_slice,
  return_option_boxed_number_slice,
} from './guide_supported_types_examples';

take_boxed_number_slice_by_value(new Uint8Array(100));

let x = return_boxed_number_slice();
console.log(x instanceof Uint32Array); // true

take_option_boxed_number_slice(null);
take_option_boxed_number_slice(undefined);
take_option_boxed_number_slice(new Int16Array(256));

let y = return_option_boxed_number_slice();
if (y == null) {
  // ...
} else {
  console.log(x instanceof Int32Array); // true
}