[英]Generics in Rust :: mismatched types expected struct `Token<'_, T>` found struct `Token<'_, i32>
我对返回类型有疑问。 抱歉代码错误。 我正在学习Rust,没有找到这个问题的答案。 我也尝试了 Rust 这本书,但没有成功。
错误:预期类型不匹配 struct Token<'_, T>
找到 struct Token<'_, {integer}>
代码:
struct Token<'a, T: 'a> {
token_type: &'a str,
value e: T,
}
impl<'a, T> Token<'a, T> {
pub fn new(ttype: &'a str, value: T) -> Token<'a, T> {
Token {
token_type: ttype,
value,
}
}
}
struct Lexer<'a> {
input_code: &'a str,
pos: i32,
current_char: String,
}
impl<'a> Lexer<'a> {
pub fn get_next_token<T>(&self) -> Token<T> {
while self.current_char != EOF {
if self.current_char == SPACE {
self.skip_whitespace();
continue;
}
if DIGITS.to_owned().contains(&self.current_char) {
let number: i32 = self.create_integer();
let token = Token::new(INTEGER, number);
return token;
}
if self.current_char == "+" {
self.advace();
let token = Token::new(SUM, "+");
return token;
}
}
let token = Token::new(EOF, 0);
token
}
...more code
你的 function 说它会返回一个Token<T>
。
在此块中,您返回一个Token<i32>
(这是错误消息的来源)。
if DIGITS.to_owned().contains(&self.current_char)
let number: i32 = self.create_integer();
let token = Token::new(INTEGER, number);
return token;
}
在这个块中,您返回一个Token<&'static str>()
。
if self.current_char == "+" {
self.advace();
let token = Token::new(SUM, "+");
return token;
}
这些都不符合您的返回类型Token<T>
。 这确实表明您的 function 可以返回调用者想要的任何T
的令牌。 这是一份很难履行的契约!
这个问题的解决方案可能是从Token<T>
中删除泛型,而是对所有可能的 Tokens 进行enum
(看起来你已经接近token_type
字段的这个想法)。 然后,您的get_next_token
function 将只返回一个Token
,调用者必须弄清楚 Token 实际包含的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.