使用Option <t>中的T作为Rust </t>中的函数参数

时间:2014-08-06 00:55:20

标签: rust

对于此代码:

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_valOption<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()后,我还没有找到关于如何将选项强制转换为原始类型的文档。

1 个答案:

答案 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

相关的各种方法