我知道你不能为当前crate中没有实现的类型实现Default
trait,为什么你不能把那些类型别名为内部使用的类型并实现它呢?
use std::collections::HashMap;
pub type MyPortMappings = HashMap<&'static str, (u32, &'static str)>;
impl Default for MyPortMappings {
fn default() -> Self {
let mut m = HashMap::new();
m.insert("ftp", (21, "File Transfer Protocol"));
m.insert("http", (80, "Hypertext Transfer Protocol"));
m
}
}
fn main() {}
错误:
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
--> src/main.rs:5:1
在自己的控制下实现默认值没有意义吗?
Playground
1条答案
按热度按时间1u4esq0p1#
这是因为类型别名只是别名,而不是单独的类型。要创建独立的类型,请使用
struct
、enum
或union
之一。您也可以使用Delegate crate将字段的方法委托给结构体本身。答案一:
创造一个结构!
但是在你的例子中,最好是实现一个返回所需值的函数,或者创建一个trait,如果你需要它成为一个方法的话,在这种情况下创建另一个类型是不必要的。