У меня есть структура App
:
struct App {
cmd: Command
}
, которой принадлежит команда типа Command
:
enum Command {
Cmd1 { flag: bool }
}
(я использую StructOpt для получения интерфейса командной строки из это.)
Чтобы выполнить правильную команду, у меня есть такая функция:
impl App {
fn execute(&mut self) {
match &self.cmd {
Command::Cmd1 { flag } => self.do_cmd1(*flag)
};
}
}
, где я обрабатываю фактическое выполнение в дополнительной функции do_cmd1(&mut self, flag: bool)
, чтобы сохранить execute
в чистоте. Однако это не работает, поскольку в self.do_cmd1(*flag)
я заимствую self
как изменяемый, а также как неизменяемый через *flag
, который принадлежит cmd
, который, в свою очередь, принадлежит self
.
Мой вопрос : Каков был бы правильный способ доступа к flag
в do_cmd1
, который уважает правила заимствования?
Уточнение: мне нужно, чтобы это также работало для таких вещей, как
enum Command {
Cmd2 { text: String }
}
, где поле варианта не Copy
.