基本上,我只想要"快捷方式":
impl Foo { const c : i32 = 42; type V = i32; fn bar() -> V { c } }
但编译器抱怨:
error: associated constants are experimental (see issue #29646)
Matthieu M... 7
如错误消息中所述,关联的常量(const c: i32 = 42
)是实验性的.
这意味着,除非您切换到夜间编译器并启用该功能,否则您不能将常量嵌套在实现或特征中.
但是,您可以在模块范围内使用常量:
const C: i32 = 42;
如果你解决了这个问题,你将会遇到下一个错误:关联类型只允许在特征及其实现中,而不是在"固有"实现中.
再一次,解决方法是在模块范围内提取类型别名:
type V = i32;
以下代码编译:
const C: i32 = 42; type V = i32; struct Foo; impl Foo { fn bar() -> V { C } }
并与C
和V
是私人(仅在模块中访问),不漏.
如错误消息中所述,关联的常量(const c: i32 = 42
)是实验性的.
这意味着,除非您切换到夜间编译器并启用该功能,否则您不能将常量嵌套在实现或特征中.
但是,您可以在模块范围内使用常量:
const C: i32 = 42;
如果你解决了这个问题,你将会遇到下一个错误:关联类型只允许在特征及其实现中,而不是在"固有"实现中.
再一次,解决方法是在模块范围内提取类型别名:
type V = i32;
以下代码编译:
const C: i32 = 42; type V = i32; struct Foo; impl Foo { fn bar() -> V { C } }
并与C
和V
是私人(仅在模块中访问),不漏.