fn main() {
let k = "fire";
drop(k);
println!("{:?}", k);
}
Run Code Online (Sandbox Code Playgroud)
k为什么我丢了之后还能用?不会drop自动解除引用吗?如果是,那为什么?的实现是什么Drop样的&str?
我的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.so到rustc main.rs命令?
我正在尝试反序列化一些具有重复键的 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)
我的 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)