【问题标题】:Issue with String using in multiple functions在多个函数中使用字符串的问题
【发布时间】: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 of path_data``
  • 完整的错误信息应该给你一个很好的错误解释。请仔细阅读——它确实是您提示问题的最佳来源。您将移动filepath 两次——首先移动到home(),然后移动到index_route()。如果您控制这些函数,请考虑将其签名更改为使用&str 而不是String。如果这不是选项,请在调用中将字符串的副本传递给home(),即传递filepath.clone() 而不是filepath
  • 我尝试使用&str 更改所有签名,但我还有其他错误......如果我“听”编译器,我需要静态生命周期,但是当我更改为静态生命周期时,出现其他错误。也许Config struct 是问题所在?有指向我的仓库的链接:github.com/Universemul/search_engine 我认为这会更容易

标签: rust


【解决方案1】:

您需要在将字符串移入闭包之前复制

pub fn startup(port: i16, filepath: String) -> () {
    let mut server = Nickel::new();

    let filepath_clone = filepath.clone();
    server.get("/", middleware! { |request, mut response|
        // use the clone from above
        routes::base::home(request, filepath_clone)
    });

    // the original is still accessible
    routes::index_route(&mut server, filepath);

    let addr = format!("127.0.0.1:{}", port);
    println!("Start Rest Api successfully");
    server.listen(addr).unwrap();
}

【讨论】:

  • 感谢您的回答!在发布问题之前我已经考虑过了,但我不知道这是否是一个“好”的做法。通过查看镍的源代码,它是唯一的解决方案......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多