封箱數值切片: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 (Int32Array 、Uint8Array 等...) |
注意:當將封箱切片返回給 JavaScript 時,切片的內容會從 Wasm 線性記憶體複製到 JavaScript
TypedArray
中,反之,當接收 JavaScriptTypedArray
作為 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
}