2017-01-25 13 views
1

대체하는 데,하는 API가 Cow<[sometype]>를 사용하여 이동할 때 :슬라이스/벡터를 함수 인자로 'Cow <[type]>'으로 강요 할 수 있습니까?

some_func(arg1, arg2, arg3); 

으로 :

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

은 매우 조밀 한 구문입니다.

벡터 또는 슬라이스를 함수 인수로 전달할 때 Cow에 상응하는 방법으로 강제 변환 할 수 있습니까?


당신이 함수에 여러 번 같은 인수를 사용하는 경우, 예를 들어,이 작업을 수행하는 좋은 이유 하지가있을 수 있습니다, 명시 적 문법은 Cow<[]> 버전 변수를 할당하고 보관해야 힌트입니다. 그러나 이것이 가능한지 알고 싶습니다.

+3

난 당신이'Into'의 특성에 관심이있을 것 같아요. 그런 다음 함수에서 제네릭 유형을 제한 할 수 있습니다. – squiguy

답변

5

특성은 Into입니다. 기능에 into() 방법을 Into<Cow<'a, [T]>>을 가지고 호출 할 함수를 선언 :

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

+2

Note : 이것은 shadowing이 정말 흥미로운 곳 중 하나입니다. 만약 당신이'x' 인자의 이름을 바꾸면 shadowing 한 후에 우연히 더 이상 그것을 참조 할 수 없습니다. –