rust 当泛型为`&str`或`String`时,将泛型限制为“string like”

watbbzwu  于 2023-05-22  发布在  其他
关注(0)|答案(2)|浏览(269)

我有一些代码,但问题归结为:

pub struct Thing<S>
where S: AsRef<str> // im using AsRef here but the point is just that `S` is string-like
{
   this: S
}

impl<S> Default for Thing<S>
where S: AsRef<str> {
    fn default() -> Self {
        Self {
            this: "i am a `&'static str`"
        }
    }
}

Cargo说:

expected type parameter `S`
        found reference `&'static str`

我知道这个问题与它是对str的引用有关,我只是不知道该怎么办。如何限制泛型为“类似字符串”,同时确保该泛型至少可以是&strString

bxjv4tth

bxjv4tth1#

在这种情况下,您根本不需要仿制药。该函数不会生成通用的Self,而是生成一个特定的Self

impl Default for Thing<&'static str> {
    fn default() -> Self {
        Self {
            this: "i am a `&'static str`"
        }
    }
}

don't put trait bounds on struct definitions

mcvgt66p

mcvgt66p2#

为了避免将来的生存期问题,您还可以使用String而不是&str来解决该任务:

pub struct Thing<S: Into<String>> {
    this: S,
}

impl Default for Thing<String> {
    fn default() -> Self {
        Self {
            this: "I am a String".to_string(),
        }
    }
}

相关问题