首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘*arg0`0’寿命不够长- wasm_bindgen

‘*arg0`0’寿命不够长- wasm_bindgen
EN

Stack Overflow用户
提问于 2020-08-28 16:24:16
回答 1查看 470关注 0票数 3

运行以下代码时:

Cargo.toml

代码语言:javascript
复制
[lib]
crate-type = ["cdylib"]

[dependencies]
serde = { version = "1.0", features = ["derive"] }
wasm-bindgen = {version = "0.2.67", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.17"

lib.rs

代码语言:javascript
复制
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;

#[derive(Serialize, Deserialize)]
struct Output {
    strings: Vec<String>,
}

#[wasm_bindgen] //error occuring here
pub async fn return_strings(_input: &str) -> JsValue {
    
    //example function that returns a js value
    let strings: Vec<String> = Default::default();
    let output = Output { strings };
    
    JsValue::from_serde(&output).unwrap()
}

我得到以下错误:

*arg0活得还不够长

借来的价值不能长久--争论要求*arg0是为'static借来的

如果有人能告诉我为什么,我会帮上大忙的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 08:08:14

当Rust假设return_strings返回的未来具有与_input相同的生存期时,即使它实际上没有向它借款,也会导致错误消息。基本上,去糖化函数签名看起来是:

代码语言:javascript
复制
pub fn return_strings<'a>(_input: &'a str) -> impl Future<Output = JsValue> + 'a;

生成的代码需要一个具有'static生存期的未来,但返回的未来实际上以临时字符串变量的生存期结束。

开发人员意识到了这个限制。。可能最简单的解决方案是使用一个拥有的StringBox<str>参数,而不是借用的&str

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63637619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档