【发布时间】:2020-12-30 03:21:47
【问题描述】:
我正在尝试使用 Rust 为尚未实现的处理器架构编写汇编程序。我刚刚完成了词法分析器,并正在尝试构建它并修复我在此过程中犯的所有错别字和错误。
但是,一个不断阻塞构建日志的错误是错误 E0308:类型不匹配。本质上,每次我尝试在 rust 编译器不希望我返回的地方返回 Result::Err (因为源文件包含错误)时,我都会收到此错误。我不在乎 rust 编译器期望什么。我正在尝试在这里编写一个汇编程序。我能做些什么来阻止 E0308 的发生?
示例:这是我的程序中触发此错误的部分内容。
if bin_regex.is_match(&s[1..25]) {
// Absolute Memory
add_info = AddressInfo::new(ValueType::Binary, AddressMode::AbsoluteMemory);
content = &s[0..25];
} else if bin_regex.is_match(&s[1..17]) {
if &s[17..18] == "p" {
// Absolute Port
add_info = AddressInfo::new(ValueType::Binary, AddressMode::AbsolutePort);
content = &s[0..18];
} else {
// Zero Bank
add_info = AddressInfo:new(ValueType::Binary, AddressMode::ZeroBank);
content = &s[0..17];
} else if bin_regex.is_match(&s[1..9]) {
// Zero Page
add_info = AddressInfo::new(ValueType::Hexadecimal, AddressMode::ZeroPage);
content = &s[0..9];
} else {
// Error
Err(format!("Invalid Binary address or Binary address out of range"))
}
这是错误的样子:
...
error[E0308]: mismatched types
--> src/lex.rs:407:17
|
401 | } else if bin_regex.is_match(&s[1..9]) {
| ____________________-
402 | | // Zero Page
403 | | add_info = AddressInfo::new(ValueType::Binary, AddressMode::ZeroPage);
404 | | content = &s[0..9];
... | |
407 | | Err(format!("Invalid Binary address or Binary address out of range"))
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found enum `std::result::Result`
408 | | }
| |_____________- expected this to be `()`
|
= note: expected unit type `()`
found enum `std::result::Result<_, std::string::String>`
...
【问题讨论】:
-
你知道
Err是一个类型构造函数,而不是一个函数吗?当你写Err(...)时,你只是在创建一个新的Err对象,你可以用它做些什么。也许你的意思是return Err(...);? -
代码位所在的函数返回 Result
,当帮助函数在词法分析器中返回错误时,它会传播到 lex() 函数,该函数将所有这些Vec() 中的错误字符串,如果至少有一个错误并且它不处于详细模式,则将该错误字符串向量返回给主函数,该函数将它们打印出来并以错误代码退出。
标签: rust