Javascript にエクスポートされた 2 つの構造体があります。インスタンスを作成して JavaScript でエラーなく使用できますが、インスタンスを Rust 側のベクターにプッシュすると、「Uncaught Error: null pointer passed to rub」というエラーが発生します。
所有権が変更されるため、JS オブジェクトが null になるのはまったく正常なことですが、JavaScript 側で物事を変更するには、JavaScript オブジェクトを保持する必要もあります。
「vect」オブジェクトをnullにせず、変更できるようにする正しい方法はありますか?
実例を追加しました。ブラウザのコンソールにエラーが表示されます。
さびコード
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
struct Vector3 {
x: f32,
y: f32,
z: f32,
}
#[wasm_bindgen]
impl Vector3 {
#[wasm_bindgen(constructor)]
pub fn new() -> Vector3 {
return Vector3 {
x: 0.0,
y: 0.0,
z: 0.0,
};
}
pub fn get_x(&self) -> f32 {
self.x
}
}
#[wasm_bindgen(extends = Object)]
struct Group {
list: Vec<Vector3>,
}
#[wasm_bindgen]
impl Group {
#[wasm_bindgen(constructor)]
pub fn new() -> Group {
return Group { list: vec![] };
}
pub fn add(&mut self, vec: Vector3) {
self.list.push(vec);
}
}
JavaScript コード
let group = new Group();
let list = [];
for (let i = 0; i < 10; i++) {
let vect = new Vector3();
list.push(vect);
group.add(vect);
}
setInterval(() => {
for (let i = 0; i < list.length; i++) {
const vect = list[i];
console.log(vect.get_x());
}
}, 1000);