是否有可能将切片/载体强制转换为' Cow< [type]>'在函数参数?

时间:2017-01-25 22:10:46

标签: rust copy-on-write

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

some_func(arg1, arg2, arg3);

使用:

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

语法相当密集。

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

可能有充分的理由这样做,例如,如果您多次使用相同的参数到函数,则显式语法提示应分配Cow<[]>版本变量并保留。但是,我很想知道这是否可行。

1 个答案:

答案 0 :(得分:5)

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