是否有可能将切片/向量强制转换为函数参数中的'Cow <[type]>'?

ide*_*n42 2 copy-on-write rust

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

some_func(arg1, arg2, arg3);
Run Code Online (Sandbox Code Playgroud)

附:

some_func(Cow::from(&arg1[..]), Cow::from(&arg2[..]), Cow::from(&arg3[..]));
Run Code Online (Sandbox Code Playgroud)

语法相当密集.

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


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

Chr*_*son 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[..]);
}
Run Code Online (Sandbox Code Playgroud)

操场

  • 注意:这是一个阴影非常有趣的地方,如果你重命名参数`x`然后在阴影之后你不能再意外地引用它. (2认同)