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

标签 rust

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

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

但是编译器提示:

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

最佳答案

如错误消息中所述,相关常量 (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 是私有(private)的(只能在模块内访问)它们不会泄漏。

关于rust - 如何在 Rust 中定义关联的 const 或类型别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41588182/

相关文章:

types - 你如何在 Rust 中指定值约束?

vector - 有没有更友好的类似 RefCell 的对象?

rust - 关于生命,我是否遗漏了什么?

iterator - 如何编写返回对自身的引用的迭代器?

unit-testing - 如何在 Rust 中运行任何测试之前运行设置代码?

rust - 如何结合 `Ord::cmp()`中的两个cmp条件

rust - 如何在 BufReader 中包装实现 Read 和 Write 的结构的读取部分?

generics - 如何将特征对象传递给向量,该向量在向量的向量中也具有统一的类型?

rust - 如何处理 tokio::spawn 闭包需要'static 和 &self?

sorting - 为什么 Rust 不通过 f64 和 f32 的 Ord 特性实现总排序?