如何在Rust中定义关联的const或类型别名?

时间:2017-01-11 10:20:57

标签: rust

基本上,我只想要"快捷方式":

impl Foo {
    const c : i32 = 42;
    type V = i32;
    fn bar() -> V { c }
}

但编译器抱怨:

error: associated constants are experimental (see issue #29646)

1 个答案:

答案 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 }
}

并且CV是私有的(只能在模块中访问),它们不会泄漏。