我正在努力理解Rust的规则是什么,大约是!
和类型判断.
此函数执行类型判断:
fn works<E>(r: Result<i32, E>) -> i32 {
match r {
Ok(v) => v,
Err(_) => {
panic!("bad");
}
}
}
而这一次则没有:
fn fails<E>(r: Result<i32, E>) -> i32 {
match r {
Ok(v) => v,
Err(_) => {
panic!("bad");
()
}
}
}
这似乎与我是否真的 Select 了不稳定的!
功能无关.对于fails
,我收到关于无法访问代码的警告,以及关于Err
ARM返回()
而不是i32
的错误(E0308).
为什么会有这样的区别?我的印象是,{ E; }
和{ E; () }
之间真的没有区别--前者没有最终操作数,隐式地()
也是,而后者有最终操作数,也是……明确地说是()
.但在这种情况下,panic!
的存在会导致;
不起作用.
{ panic!("bad"); }
真的有!
类型吗?或者有没有其他方式编译器只是简单地 suppress 错误?