Rust 如何实现打印任何类型和长度的向量的函数?

Rust 如何实现打印任何类型和长度的向量的函数?,rust,Rust,我正在尝试实现一个函数,它采用任何类型和长度的向量来打印它 这是我现在的实现: fn print_vec<T>(v: &T) { for i in v.iter() { println("{}",i); } } fn main() { let vec = [1,2,3]; print_vec(vec); } 问题1 问题2 您正在调用println,但宏名为println 问题3 您可以引用任何类型,但并非所有类型都实现方法

我正在尝试实现一个函数,它采用任何类型和长度的向量来打印它

这是我现在的实现:

fn print_vec<T>(v: &T) {
    for i in v.iter() {
        println("{}",i);
    }
}

fn main() {
    let vec = [1,2,3];
    print_vec(vec);
}
问题1 问题2 您正在调用
println
,但宏名为
println

问题3 您可以引用任何类型,但并非所有类型都实现方法
iter
!例如,
5.iter()
是什么意思?或者
true.iter()
?因此,让我们将其更改为具有该方法的类型-切片:

我们说过我们想要一个切片,但是切片中的项目可以是任何类型,并且不是所有类型都可以打印!我们可以使用trait绑定将
T
的类型限制为只能使用
{}
格式化程序打印的内容:

fn print_vec<T>(v: &[T])
    where T: std::fmt::Display
您应该调用此变量
vec
,因为它不是
vec
。实际上,它是一个数组。在Rust中,数组、
Vec
s和切片都是不同的概念——我确信还有其他问题详细说明了它们的区别

出于类似的原因,您不应该调用方法
print\u vec
,因为它现在接受一个切片

fn print_vec<T>(v: &T);
print_vec(&vec);
error: type `&T` does not implement any method in scope named `iter`
fn print_vec<T>(v: &[T])
error: the trait `core::fmt::Display` is not implemented for the type `T`
fn print_vec<T>(v: &[T])
    where T: std::fmt::Display
fn print_vec<T>(v: &[T])
    where T: std::fmt::Display
{
    for i in v.iter() {
        println!("{}", i);
    }
}

fn main() {
    let vec = [1, 2, 3];
    print_vec(&vec);
} 
let vec = [1, 2, 3];