是否可以在函数参数中将 slices/vectors 强制转换为 'Cow<[type]>'?

Is it possible to coerce slices/vectors into 'Cow<[type]>' in function arguments?

移动 API 以使用 Cow<[sometype]> 时,必须替换:

some_func(arg1, arg2, arg3);

有:

some_func(Cow::from(&arg1[..]), Cow::from(&arg2[..]), Cow::from(&arg3[..]));

语法相当密集。

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


可能有很好的理由 这样做,例如,如果您多次对一个函数使用相同的参数,显式语法提示 Cow<[]> version 应分配一个变量并保留。不过,我很想知道这是否可行。

Into 特质就是您想要的。声明函数取Into<Cow<'a, [T]>>,在函数中调用into()方法:

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[..]);
}

Playground