我可以在不需要额外函数的情况下声明一个采用 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());
我有一个枚举 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());