标签: associated-const

恒定"f"表达式的相关常数

我试图使用关联常量作为if-expression中的条件来初始化另一个常量.我认为这应该工作,因为我可以直接使用关联的常量初始化一些其他常量,因此它适用于const上下文并且if表达式不依赖于任何其他值.

trait C {
    const c: i32;
}

trait StaticAssert<T1: C, T2: C> {
    const canUseAssociatedConst: i32 = T1::c;
    const canCompareAssociatedConst: bool = T1::c == T2::c;

    const check: i32 = if T1::c == T2::c { 1 } else { 0 };
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我收到一个错误:

error[E0019]: constant contains unimplemented expression type
 --> src/lib.rs:9:24
  |
9 |     const check: i32 = if T1::c == T2::c { 1 } else { 0 };
  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我不确定编译器想告诉我什么.我添加了i32后缀以强制文字实际上是i32值,以防止分支中不同类型的任何问题,但这也没有帮助.

rust associated-const

5
推荐指数
1
解决办法
145
查看次数

为什么类型别名不能使用Rust中原始类型的关联常量?

我有一个类型别名type CardId = u64;,我想将其初始化为可以通过std::u64::MAX常量获得的最大数量。得知我无法使用别名做同样的事情而感到惊讶。

use std::u64;

type CardId = u64;

fn main() {
    let this_works = u64::MAX;
    let this_doesnt_work = CardId::MAX;

    println!("Max amount in integer: {} and {}", this_works, this_doesnt_work);
}
Run Code Online (Sandbox Code Playgroud)

(永久链接到操场)

我期望MAX常量也可以从类型别名访问。当我将类型更改为u32时,这将对我有帮助,这将导致代码有两点需要修改,而不仅仅是类型别名的位置。为什么要做出这个决定,而我是否错过了可能使之成为可能的事情?

alias types rust associated-const

3
推荐指数
2
解决办法
64
查看次数

为什么 Rust 不支持具有关联常量的特征对象?

我知道这是因为对象安全

对象安全特征可以是特征对象的基本特征。如果特征具有以下品质(在RFC 255中定义),则该特征是对象安全的

  • ...
  • 它不能有任何关联的常量。

但是如果用特定值声明关联常量,为什么 Rust 仍然不支持它呢?这是一个例子:

trait Trait {
    const A: i32 = 64;
}

fn fun(t: Box<dyn Trait>) -> bool {
    return  true;
}
Run Code Online (Sandbox Code Playgroud)

我想用函数返回一个常量值,故意省略&self参数,但还是不行。这是代码:

trait Trait {
    fn getA() -> i32 {
        64
    }
}

fn fun(t: Box<dyn Trait>) -> bool {
    return  true;
}
Run Code Online (Sandbox Code Playgroud)

Rust 不支持它有什么低级原因吗?或者只是因为 RFC 规则?

rust trait-objects associated-const

1
推荐指数
1
解决办法
285
查看次数

标签 统计

associated-const ×3

rust ×3

alias ×1

trait-objects ×1

types ×1