for
ループ内の変数にアクセスしようとしています。私はString
が含まれているので、構造体にCopy
を実装できません。どのようにして変数を繰り返し使用しますか?反復でコピーできない構造体を移動
コンパイル時にエラーE0382が発生します。エラーのRustドキュメントを見ると、問題を解決するために参照カウントを使用すると述べました。これは私の場合の唯一の解決策ですか?
#[derive(Clone)]
struct InputParser {
args: Vec<String>,
current: String,
consumed_quote: bool,
}
impl InputParser {
pub fn parse(input: String) -> Vec<String> {
let parser = InputParser {
args: Vec::new(),
current: String::new(),
consumed_quote: false,
};
for c in input.chars() {
match c {
'"' => parser.consume_quote(),
' ' => parser.consume_space(),
_ => parser.consume_char(c),
}
}
parser.end();
return parser.args;
}
pub fn consume_space(mut self) {
if !self.consumed_quote {
self.push_current();
}
}
pub fn consume_quote(mut self) {
self.consumed_quote = self.consumed_quote;
if self.consumed_quote {
self.push_current();
}
}
pub fn consume_char(mut self, c: char) {
self.current.push(c);
}
pub fn end(mut self) {
self.push_current();
}
pub fn push_current(mut self) {
if self.current.len() > 0 {
self.args.push(self.current);
self.current = String::new();
}
}
}
私はfor
ループの反復間でparser
にアクセスしたいです。
なぜ 'parse'関数がInputParser実装の一部ですか? InputParserを返さず、自己参照もしません。 – SirDarius
なぜ値で '自己 'を取っているのですか(' fn end(mut self) ')どこでも? – Shepmaster
'self.consumed_quote = self.consumed_quote;'は非常に疑わしい行です。 – Shepmaster