구조체에 바인딩되는 대신 문자열을 구문 분석 메서드에 전달할 수 있도록 파서를 다시 작성하려고합니다.파서 구조체의 수명이 느리다
이전에, 내 코드는 다음과 같이 보았다 :
use std::collections::HashMap;
use std::str;
#[derive(Debug)]
pub enum ParserError {
Generic
}
pub struct Resource(
pub HashMap<String, String>
);
pub struct Parser<'a> {
source: Option<str::Chars<'a>>
}
impl<'a> Parser<'a> {
pub fn new() -> Parser<'a> {
Parser { source: None }
}
pub fn parse(&mut self, source: &str) -> Result<Resource, ParserError> {
self.source = Some(source.chars());
let entries = HashMap::new();
Ok(Resource(entries))
}
}
fn main() {
let parser = Parser::new();
parser.parse("key1 = Value 1");
parser.parse("key2 = Value 2");
}
하지만 난의 수명 덤비는 것 같은 보인다 :
use std::collections::HashMap;
use std::str;
#[derive(Debug)]
pub enum ParserError {
Generic
}
pub struct Resource(
pub HashMap<String, String>
);
pub struct Parser<'a> {
source: str::Chars<'a>
}
impl<'a> Parser<'a> {
pub fn new(source: &str) -> Parser {
Parser { source: source.chars() }
}
pub fn parse(&mut self) -> Result<Resource, ParserError> {
let entries = HashMap::new();
Ok(Resource(entries))
}
}
fn main() {
let parser = Parser::new("key1 = Value 1");
let res = parser.parse();
}
내 새로운 코드에서 나는 이런 식으로 뭔가를 시도하고
내가 완전히 편안하지 않은 방법. 내가 얻는 오류는 다음과 같습니다.error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements
--> test.rs:22:35
|
22 | self.source = Some(source.chars());
|
이것을 처리하는 표준 방법은 무엇입니까? String
을 가지고 Parser
구조체의 수명으로 복제하려면 어떻게해야합니까?