接受类型 T 的自有数据或对类型 T 的数据的引用并分别返回原始数据或引用数据的克隆的函数

问题描述 投票:0回答:1

如何编写一个函数,接受

T
类型的数据或对
T
类型数据的引用,并分别返回原始数据或引用数据的克隆?像这样的东西:

fn foo(input: T or &T) -> T {
    if input is &T {
        input.clone()
    } else {
        input
    }
}
rust
1个回答
0
投票

你想传入一些可以转换成的东西

Cow
:

use std::borrow::Cow;

fn main() {
    let owned = String::from("Hello world.");
    let _clone = owned.clone();
    let borrowed = &_clone;
    assert_eq!(borrowed_or_owned(owned), "Hello world.".to_string());
    assert_eq!(borrowed_or_owned(borrowed), "Hello world.".to_string());
}

fn borrowed_or_owned<'a, T>(value: impl Into<Cow<'a, T>>) -> <T as ToOwned>::Owned
where
    T: ToOwned + 'a + ?Sized,
{
    value.into().into_owned()
}

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.