无法移出共享引用后面的 *** (拍手)
cannot move out of *** which is behind a shared reference (Clap)
我正在学习 Rust,想更好地了解这里发生的事情。我有以下声明:
pub struct SomeHandler {}
impl SomeHandler {
pub fn configure(&self, app: &App) {
app.subcommand(
SubCommand::with_name("server-status")
.about("Displays the status of the server")
);
}
pub fn check_match(&self, matches: &ArgMatches) -> bool {
matches.subcommand_matches("server-status").is_some()
}
pub fn handle(&self, arg_match: &ArgMatches) {
...
}
}
然后在 main.rs
我这样称呼它:
let mut app = App::new("My CLI")
.author("Author <author@email.com>")
.version("0.1.0")
.about("Command line interface app");
let myhandler = SomeHandler {};
myhandler.configure(&app);
let matches = app.get_matches();
let matched = myhandler.check_match(&matches);
if !matched {
eprintln!("None of the commands match the provided args.");
process::exit(1);
}
myhandler.handle(&matches);
process::exit(0);
但我收到以下错误:
error[E0507]: cannot move out of `*app` which is behind a shared reference
--> cli\src\some_handler.rs:15:9
|
15 | app.subcommand(
| ^^^ move occurs because `*app` has type `App<'_, '_>`, which does not implement the `Copy` trait
如何修复此错误?有没有更好的方法来处理这个问题?我正在尝试使用多个命令和选项在 Rust 中构建一个命令行应用程序。我不想在一个文件中全部实现。在这里遵循什么好的模式?
任何帮助都会很棒,
谢谢,
曼森
subcommand()
方法使用应用程序,return 是一个新应用程序。这很好地支持链接,但需要您的 configure
函数也接受一个对象,并且还需要 return 一个:
pub fn configure(&self, app: App<'static, 'static>) -> App<'static, 'static> {
app.subcommand(
SubCommand::with_name("server-status")
.about("Displays the status of the server")
)
}
// and in main:
app = myhandler.configure(app);
configure
也可以引用,但是那必须是mut
引用,你必须调用mem::replace
来提取Clap
在参考之外,留下一个虚拟代替它,最后将它分配回来。如果你真的很好奇,就看看吧here。
我正在学习 Rust,想更好地了解这里发生的事情。我有以下声明:
pub struct SomeHandler {}
impl SomeHandler {
pub fn configure(&self, app: &App) {
app.subcommand(
SubCommand::with_name("server-status")
.about("Displays the status of the server")
);
}
pub fn check_match(&self, matches: &ArgMatches) -> bool {
matches.subcommand_matches("server-status").is_some()
}
pub fn handle(&self, arg_match: &ArgMatches) {
...
}
}
然后在 main.rs
我这样称呼它:
let mut app = App::new("My CLI")
.author("Author <author@email.com>")
.version("0.1.0")
.about("Command line interface app");
let myhandler = SomeHandler {};
myhandler.configure(&app);
let matches = app.get_matches();
let matched = myhandler.check_match(&matches);
if !matched {
eprintln!("None of the commands match the provided args.");
process::exit(1);
}
myhandler.handle(&matches);
process::exit(0);
但我收到以下错误:
error[E0507]: cannot move out of `*app` which is behind a shared reference
--> cli\src\some_handler.rs:15:9
|
15 | app.subcommand(
| ^^^ move occurs because `*app` has type `App<'_, '_>`, which does not implement the `Copy` trait
如何修复此错误?有没有更好的方法来处理这个问题?我正在尝试使用多个命令和选项在 Rust 中构建一个命令行应用程序。我不想在一个文件中全部实现。在这里遵循什么好的模式?
任何帮助都会很棒,
谢谢, 曼森
subcommand()
方法使用应用程序,return 是一个新应用程序。这很好地支持链接,但需要您的 configure
函数也接受一个对象,并且还需要 return 一个:
pub fn configure(&self, app: App<'static, 'static>) -> App<'static, 'static> {
app.subcommand(
SubCommand::with_name("server-status")
.about("Displays the status of the server")
)
}
// and in main:
app = myhandler.configure(app);
configure
也可以引用,但是那必须是mut
引用,你必须调用mem::replace
来提取Clap
在参考之外,留下一个虚拟代替它,最后将它分配回来。如果你真的很好奇,就看看吧here。