【发布时间】:2020-01-19 21:24:36
【问题描述】:
我是 Rust 的初学者,我对 String 有一些小问题。 我有一个这样的结构:
#[derive(Deserialize, Debug)]
pub struct Config {
pub filepath: String,
#[serde(default = "default_port")]
pub port: i16
}
我需要filepath 字段在此处使用的几种方法:
pub fn startup(port: i16, filepath: String) -> () {
let mut server = Nickel::new();
server.get("/", middleware! { |request, mut response|
routes::base::home(request, filepath)
});
routes::index_route(&mut server, filepath);
let addr = format!("127.0.0.1:{}", port);
println!("Start Rest Api successfully");
server.listen(addr).unwrap();
}
Home 是这样定义的:pub fn home(_request: &mut nickel::Request, path: String) -> String
还有 index_route :pub fn index_route(server: &mut Nickel, path_data: String) -> ()
但我有这个错误:use of moved value: filepath
我使用过 to_owned 或 clone 或 to_string,但我不明白为什么它不起作用。我读过这本书,但我认为缺少一些东西
非常感谢您的帮助
【问题讨论】:
-
它对我没有帮助......因为当我使用参考时,我有这个错误:
explicit lifetime required in the type ofpath_data`` -
完整的错误信息应该给你一个很好的错误解释。请仔细阅读——它确实是您提示问题的最佳来源。您将移动
filepath两次——首先移动到home(),然后移动到index_route()。如果您控制这些函数,请考虑将其签名更改为使用&str而不是String。如果这不是选项,请在调用中将字符串的副本传递给home(),即传递filepath.clone()而不是filepath。 -
我尝试使用
&str更改所有签名,但我还有其他错误......如果我“听”编译器,我需要静态生命周期,但是当我更改为静态生命周期时,出现其他错误。也许Config struct是问题所在?有指向我的仓库的链接:github.com/Universemul/search_engine 我认为这会更容易
标签: rust