是否可以在函数参数中将 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[..]);
}
移动 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[..]);
}