我可以在不需要额外函数的情况下声明一个采用 String 或 &str 的枚举值吗?

Can I declare an enum value that takes a String or &str without needing additional functions?

我有一个枚举 String:

enum MyLovelyEnum {
    Thing(String),
}

对于测试,我希望能够传入一个&'static str以避免MyLovelyEnum::Thing("abc".to_string)一遍又一遍。

我发现您可以使用带有构造函数的结构很好地做到这一点:

// From: https://hermanradtke.com/2015/05/06/creating-a-rust-function-that-accepts-string-or-str.html
struct Person {
    name: String,
}

impl Person {
    fn new<S: Into<String>>(name: S) -> Person {
        Person { name: name.into() }
    }
}

fn main() {
    let person = Person::new("Herman");
    let person = Person::new("Herman".to_string());
}

我知道我可以使用生命周期或 Cow,如 中所述,或者我可以创建自己的函数。

是否有与博客 [​​=28=] 中的枚举示例相近的内容?例如

// this is the kind of thing I am after but this specifically is not correct syntax
enum MyLovelyEnum {
  Thing<S: Into<String>>(S)
}

您可以创建通用枚举:

enum MyLovelyEnum<S>
where
    S: Into<String>,
{
    Thing(S),
}

MyLovelyEnum::Thing("a");
MyLovelyEnum::Thing("b".to_string());

我可能不会在我的代码中这样做,而是选择创建一个构造函数,就像您链接的博客 post 一样:

enum MyLovelyEnum {
    Thing(String),
}

impl MyLovelyEnum {
    fn thing(s: impl Into<String>) -> Self {
        MyLovelyEnum::Thing(s.into())
    }
}

MyLovelyEnum::thing("a");
MyLovelyEnum::thing("b".to_string());