gpt4 book ai didi

rust - 为什么在 Rust/Wasm 初学者书籍的第 4.2 节中,从 JavaScript 传递到 Wasm 的字符串总是空的?

转载 作者:行者123 更新时间:2023-12-03 11:31:51 24 4
gpt4 key购买 nike

我正在尝试关注 Rust WebAssembly book我被困在第 4.2 节的练习中。我按照答案中的描述更改了所有内容,但是给定的 &str (姓名)在greet函数始终为空。

这是我的 greet 版本带调试功能

#[wasm_bindgen]
pub fn greet(name: &str) {
if name.len() == 0 {
alert("NOT WORKING!");
} else {
alert(&format!("Hello, {}!", name));
}
}

www/index.js 文件:

import * as wasm from "wasm-game-of-life";

wasm.greet("213");

这是 中生成的函数包/wasm_game_of_life.js

/**
* @param {string} name
* @returns {void}
*/
export function greet(name) {
const ptr0 = passStringToWasm(name);
const len0 = WASM_VECTOR_LEN;
try {
return wasm.greet(ptr0, len0);

} finally {
wasm.__wbindgen_free(ptr0, len0 * 1);

}

}

我收到带有文本 NOT WORKING! 的警报弹出窗口,但我希望 Hello, 213 !为什么我的字符串是空的?是书过期了还是怎么回事?我删除了所有内容并从头开始没有运气......

我正在关注这本书,这是我使用 WebAssembly 的第一个小时。

最佳答案

我知道可能已经晚了,但我今天遇到了同样的问题,就是这样。因此,对于遇到此问题的任何人,以下是答案:
导入时 import * as wasm from "wasm-game-of-life"; , 在 wasm变量你有从 rust 库导出的模块。它包含 greet方法,但它不是在 JS 文件中定义的,它是一个 C 函数,它接受两个参数,指向字符串的指针和长度。
当您调用 wasm.greet()使用字符串参数,将其传递给 C 函数,而不是 JS 函数 greet - 这就是函数调用有效但实际上没有传递字符串的原因。
为了调用JS greet包装器,您必须显式导入它(用您的 js 文件路径替换):

import { default as wasm, greet } from "wasm-game-of-life"

wasm().then((module) => {
module.greet("Test"); // this won't work, it's C/rust greet function
console.log(module);
greet("Test"); // this should work! it's js wrapper around C function
})

关于rust - 为什么在 Rust/Wasm 初学者书籍的第 4.2 节中,从 JavaScript 传递到 Wasm 的字符串总是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com