【发布时间】:2021-12-19 09:27:07
【问题描述】:
我正在学习使用 rust 来做一些工作。我正在使用此代码在 rust 中从 Vec 中查找元素:
let filtered_music:Vec<Music> = musics.iter()
.filter(|item| item.source_id == fav.source_id)
.collect();
下一步我想把他的元素放到另一个对象上:
let curr_music = &filtered_music[0];
let fav_resp = FavMusicResponse{
id: (&fav.id.to_string()).parse().unwrap(),
song_id: None,
created_time: 0,
updated_time: 0,
user_id: 0,
source_id: fav.source_id.to_string(),
like_status: 0,
source: 0,
playlist_id: 0,
play_count: 0,
fetched_download_url: None,
downloaded: None,
music: curr_music
};
但是编译器告诉我预期的Music,发现&Music,我应该怎么做才能修复它?这是我关于这个问题的最小示例,可以在https://play.rust-lang.org/ 中运行以重现这种情况:
fn main() {
println!("Hello, world!");
let musics:Vec<Music> = Vec::new();
let filtered_music:Vec<&Music> = musics.into_iter()
.filter(|item| item.source_id == "1")
.collect();
let resp = MusicRes{
music: filtered_music[0]
};
}
pub struct Music {
pub id: i64,
pub name: String,
pub artists: String,
pub album_id: i64,
pub publishtime: i64,
pub status: i32,
pub duration: i32,
pub source_id: String,
pub source: i32,
pub created_time: i64,
pub updated_time:i64,
pub album: String,
pub fetched_download_url: i32
}
pub struct MusicRes {
pub music:Music
}
【问题讨论】:
-
您可能希望使用
into_iter而不是iter。这可能会有所帮助stackoverflow.com/a/57697614/1418750 -
into_iter仍然没有解决这个问题。 @Njuguna Mureithi 错误保持不变。 -
能否提供更完整的代码示例,尤其是可以使用play.rust-lang.org调试的代码示例
-
如何在
https://play.rust-lang.org/@Njuguna Mureithi 中添加依赖项 我没有找到cargo.toml -
我做了一个最小的复制示例。@Njuguna Mureithi
标签: rust