小编sn9*_*n99的帖子

当我使用引用而不是拥有的值调用 std::mem::drop 时会发生什么?

fn main() {
    let k = "fire";

    drop(k);

    println!("{:?}", k);
}
Run Code Online (Sandbox Code Playgroud)

操场

k为什么我丢了之后还能用?不会drop自动解除引用吗?如果是,那为什么?的实现是什么Drop样的&str

reference raii rust

6
推荐指数
1
解决办法
1360
查看次数

如何仅使用 rustc 而不是货物链接动态 Rust 库?

我的main.rs样子

// #[link(name = "lib")]
extern "C" {
    fn hello();
}

fn main() {
    unsafe {
        hello();
    }
}
Run Code Online (Sandbox Code Playgroud)

并且lib.rs

#[no_mangle]
pub fn hello() {
    println!("Hello, World!");
}
Run Code Online (Sandbox Code Playgroud)

我已经编译lib.rs使用rustc --crate-type=cdylib lib.rs -o lib.so

如何链接lib.sorustc main.rs命令?

linker ffi dynamic-linking rust

4
推荐指数
1
解决办法
2635
查看次数

如何反序列化具有重复键的 JSON 而不丢失任何值?

我正在尝试反序列化一些具有重复键的 JSON,并且它们可能有任意数量。JSON 看起来像这样:

...
"abilities": [
    {
        "ability_id": 5134,
        "ability_level": 3
    }, 
    {
        "ability_id": 5136,
        "ability_level": 3
    }
],
"abilities": [
    {
        "ability_id": 7710,
        "ability_level": 4
    }
]
...
Run Code Online (Sandbox Code Playgroud)

原始json

我的 Rust 代码是:

#[derive(Deserialize, Debug)]
pub struct Ancient {
    score: usize,
    tower_state: usize,
    barracks_state: usize,
    picks: Option<Vec<HeroId>>,
    bans: Option<Vec<HeroId>>,
    players: Vec<PlayerDetailed>,
    abilities: Option<Vec<Ability>> // has many keys
}
Run Code Online (Sandbox Code Playgroud)

原锈

该结构Ancient是 json 中另一个结构的一部分。

只有最后一个abilities有很多键,而且数量也是可变的,我已经读过这篇文章,但无法将其更改为我喜欢的(我希望最终用户仍然拥有一个结构)。我什至尝试过,#[serde(flatten)]但它只是让一切None。如果可能的话我也想改变它:

#[derive(Deserialize, Debug)]
pub struct Ancient {
    score: …
Run Code Online (Sandbox Code Playgroud)

json rust deserialization serde

3
推荐指数
1
解决办法
1645
查看次数

标签 统计

rust ×3

deserialization ×1

dynamic-linking ×1

ffi ×1

json ×1

linker ×1

raii ×1

reference ×1

serde ×1