我可以使用#[must_use]
属性将函数标记为具有必须使用或显式忽略的返回值:
#[must_use]
fn plain() -> i32 {
1
}
fn main() {
plain(); // warning
}
但是,如果我想更改函数,使其现在返回Result
,我不能这样做:
#[must_use]
fn result() -> Result<i32, ()> {
Ok(1)
}
fn main() {
result().unwrap();
}
因为对.unwrap()
的调用算作"使用",#[must_use]
属性应用于整个Result
.
有没有办法让#[must_use]
也适用于内部类型?基本上,我想确保i32
不会意外地被分号"吃掉".
我还有一个额外的限制,我不能更改这个函数的公共API,所以我不能让它返回Result<MustUse<i32>, ()>
或类似的值.