【发布时间】:2020-12-20 00:23:40
【问题描述】:
我正在处理Rust by Example。我目前在TryFrom and TryInto。这是他们的代码:
struct EvenNumber(i32);
impl TryFrom<i32> for EvenNumber {
type Error = ();
fn try_from(value: i32) -> Result<Self, Self::Error> {
if value % 2 == 0 {
Ok(EvenNumber(value))
} else {
Err(())
}
}
}
该实现阻止创建具有奇数的EvenNumber 实例,但前提是我调用try_from(或try_into)。我仍然可以直接创建EvenNumber(1337)。
在 Java(和相关语言)中,可以在构造函数中验证实例创建,例如:
class EvenNumber {
public final int value;
public EvenNumber(int value) {
if (value % 2 != 0) {
throw new IllegalArgumentException("value is odd");
}
this.value = value;
}
}
如何在 Rust 中做到这一点?
【问题讨论】:
标签: validation struct rust