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