当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Rust中定义关联的const或类型别名?》经验,为你挑选了1个好方法。

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

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

并与CV是私人(仅在模块中访问),不漏.



1> Matthieu M...:

如错误消息中所述,关联的常量(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 }
}

并与CV是私人(仅在模块中访问),不漏.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有