Rust 是否可以将切片/向量强制转换为';奶牛<;[类型]>';在函数参数中?

Rust 是否可以将切片/向量强制转换为';奶牛<;[类型]>';在函数参数中?,rust,copy-on-write,Rust,Copy On Write,移动API以使用Cow时,必须更换: some_func(arg1, arg2, arg3); 与: 是相当密集的语法 当作为函数参数传递时,有没有一种方法可以将向量或切片强制转换为它们的Cow等价物 可能有很好的理由不这样做,例如,如果您多次对函数使用相同的参数,那么显式语法就是一个提示,应该为Cow版本分配一个变量并保留该变量。然而,我很想知道这是否可行。这种特质正是你想要的。声明要将带入的函数我想您可能对带入特性感兴趣。然后,您可以在函数中约束泛型类型。注意:这是阴影非常有趣的地方,如

移动API以使用
Cow
时,必须更换:

some_func(arg1, arg2, arg3);
与:

是相当密集的语法

当作为函数参数传递时,有没有一种方法可以将向量或切片强制转换为它们的
Cow
等价物



可能有很好的理由不这样做,例如,如果您多次对函数使用相同的参数,那么显式语法就是一个提示,应该为
Cow
版本分配一个变量并保留该变量。然而,我很想知道这是否可行。

这种特质正是你想要的。声明要将
带入的函数我想您可能对
带入
特性感兴趣。然后,您可以在函数中约束泛型类型。注意:这是阴影非常有趣的地方,如果您重命名参数
x
,那么在阴影之后,您就不能再意外地引用它了。
some_func(Cow::from(&arg1[..]), Cow::from(&arg2[..]), Cow::from(&arg3[..]));
use std::borrow::Cow;

fn foo<'a, T: Into<Cow<'a, [u8]>>>(v: T) {
    let x = v.into();
    println!("{:?}", x);
}

fn main() {
    let v = vec![0,1,2];
    let s = &[3,4,5];
    foo(v);
    foo(&s[..]);
}