gpt4 book ai didi

compiler-errors - rustc 能否提供有关类型歧义错误的更多详细信息?

转载 作者:行者123 更新时间:2023-11-29 08:26:06 30 4
gpt4 key购买 nike

有这个熟悉的编译错误:

error[E0283]: type annotations required: cannot resolve `T: Constraint`

...

然后 rustc --explain E0283 说:当编译器没有足够的信息来明确选择实现时会发生此错误,并给出 helpful example .

我确切地知道如何修复错误 - 参见例如this answer .

不过,我想知道是否可以鼓励 rustc 告诉我更多信息。具体来说,类型检查器在放弃之前最终得到的可能具体类型空间的一些表示。

最佳答案

当类型检查器无法推断出明确的类型时,并不一定意味着它无法从一些有限的已知竞争者集中进行选择。 Here is the example您从文档中指的是:

trait Generator {
fn create() -> u32;
}

struct Impl;

impl Generator for Impl {
fn create() -> u32 { 1 }
}

struct AnotherImpl;

impl Generator for AnotherImpl {
fn create() -> u32 { 2 }
}

fn main() {
let cont: u32 = Generator::create();
// error, impossible to choose one of Generator trait implementation
// Should it be Impl or AnotherImpl, maybe something else?
}

如果 AnotherImpl 不存在,并且 ImplGenerator唯一实现,这仍然会工作。如果是这样,您可以稍后添加 AnotherImpl — 甚至在另一个模块或 crate 中 — 并破坏此代码。一般来说,添加一个新的定义应该是非破坏性的,当然不应该破坏另一个模块中的代码。如果编译器在这里自动选择了 Generator 的“唯一”实现,它就会违反这一点。

回到您原来的问题,错误消息可以给您的唯一信息几乎就是它已经给您的信息。类型检查器并没有四处寻找可能的实现,而是简单地拒绝甚至尝试从给定的信息中选择一种类型。

关于compiler-errors - rustc 能否提供有关类型歧义错误的更多详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051264/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com