对于此代码:
fn inner_compare<T:PartialEq+PartialOrd>(&self, val: T, fixed_val: T) -> bool {
match self.operator {
"==" => val == fixed_val,
">=" => val >= fixed_val,
"<=" => val <= fixed_val,
">" => val > fixed_val,
"<" => val < fixed_val,
_ => false,
}
}
调用
self.inner_compare(val, self.fixed_int_val);
self
在两个代码段中属于同一类型,而self.fixed_int_val
是Option<int>
,如何在函数参数中仅使用int
?
main.rs:29:52: 29:70 error: mismatched types: expected `T` but found `core::option::Option<int>` (expected type parameter but found enum core::option::Option)
可能是一个愚蠢的问题,但在调用Some()
后,我还没有找到关于如何将选项强制转换为原始类型的文档。
答案 0 :(得分:1)
有两种方法可以从Option中提取原始值。由于Option是枚举,因此它可以表示两种变体,None或Some(x)。使用模式匹配,您可以处理两者。
match self.fixed_int_val {
Some(x) => self.inner_compare(val, x), //x in this case is the int contained in self.fixed_int_val
None => ,//include logic for whatever your failure state is here
}
还有另一种使用unwrap或expect方法的选项。如果您100%确定要处理Some(x)变体,或者希望结果在None的情况下失败,请使用unwrap。展开会将值移出Some(x)。
self.inner_compare(val, self.fixed_int_val.unwrap());
还有一种包含自定义失败消息的expect方法。
self.inner_compare(val, self.fixed_int_val
.expect("Encountered None in self.fixed_int_val"));
您可以找到与选项类型here
相关的各种方法