2016-01-13 97 views
0

我想写的是从一个数组返回最小数的函数:我最小功能有什么问题?

函数定义:

pub fn min(input_array: &[i32]) -> &i32 { 
    let x = input_array.iter().min().unwrap(); 
    x 
} 

测试:

fn test_min() { 
    let input_array = [1, 2, 3, 4]; 
    assert_eq!(1, functional::min(&input_array)); 
} 

但是当我运行它,我得到的错误:

<std macros>:5:8: 5:33 error: the trait `core::cmp::PartialEq<&i32>` is not implemented for the type `_` [E0277] 
<std macros>:5 if ! (* left_val == * right_val) { 
         ^~~~~~~~~~~~~~~~~~~~~~~~~ 
src/functional.rs:104:5: 104:50 note: in this expansion of assert_eq! (defined in <std macros>) 
<std macros>:5:8: 5:33 help: run `rustc --explain E0277` to see a detailed explanation 
error: aborting due to previous error 
Could not compile `gettingrusty`. 
+0

检查x'的'同类型'让_:()= X;',最有可能的类型为'&i32',我相信你可以把它从这里开始。 –

+0

你确定这是错误吗? 'min'返回'选项'......我假设你正在解开这个问题,并没有将它包含在你的代码片段中? –

+0

对不起,添加了缺少的部分。 –

回答

4

您的min是好的(假设你想返回一个&i32),错误在assert。 这是正确的:

assert_eq!(&1, min(&input_array)); 
+0

“&1”是什么意思? –

+0

@LowKianSeong它是对临时值的引用1.你的'min'返回一个引用,所以你必须将它与另一个引用进行比较。 '&1'是一个引用,它的工作原理,'1'本身不是'&i32'就是'i32',所以它不能编译。 – eulerdisk

+0

另一个可能的解决方法是不返回引用:将' - >&i32'更改为' - > i32',将第二个'x'更改为'* x'。 –