gpt4 book ai didi

data-structures - "overflow while adding drop-check rules"实现手指树时

转载 作者:行者123 更新时间:2023-11-29 07:55:21 24 4
gpt4 key购买 nike

我正在尝试定义一个手指树结构并将其基本操作实现为 Rust 中的练习。我想出了以下内容,这基本上就是这个 paper 中描述的内容.

use self::FingerTree::{Empty, Single, Deep};
use self::Digit::{One, Two, Three, Four};

enum Digit<A> {
One(A),
Two(A, A),
Three(A, A, A),
Four(A, A, A, A),
}

enum Node<V, A> {
Node2(V, A, A),
Node3(V, A, A, A),
}

enum FingerTree<V, A> {
Empty,
Single(A),
Deep {
size: V,
prefix: Digit<A>,
tree: Box<FingerTree<V, Node<V, A>>>,
suffix: Digit<A>,
},
}

fn main() {
let e: FingerTree<i32, String> = Empty;
}

编译给我一个我不明白的错误:

error[E0320]: overflow while adding drop-check rules for FingerTree<i32, std::string::String>
--> fingertree.rs:28:9
|
28 | let e: FingerTree<i32, String> = Empty;
| ^
|
note: overflowed on enum Node variant Node2 field 0 type: i32
--> fingertree.rs:28:9
|
28 | let e: FingerTree<i32, String> = Empty;
| ^

error[E0320]: overflow while adding drop-check rules for FingerTree<i32, std::string::String>
--> fingertree.rs:28:38
|
28 | let e: FingerTree<i32, String> = Empty;
| ^^^^^
|
note: overflowed on enum Node variant Node2 field 0 type: i32
--> fingertree.rs:28:38
|
28 | let e: FingerTree<i32, String> = Empty;
| ^^^^^

为什么这不起作用?我如何让它发挥作用?

最佳答案

您已经创建了一个无限类型。

实例化 FingerTree<V, A>实例化 FingerTree<V, Node<V, A>>实例化 FingerTree<V, Node<V, Node<V, A>>>实例化,......而且看不到尽头。

编译器无法判断该类型实际上不会在运行时使用,因此会为最坏的情况做好准备。最坏的情况是无限的。

简单地替换tree的类型通过 Box<FingerTree<V, A>>解决了问题,尽管它可能不适合当前的情况。

关于data-structures - "overflow while adding drop-check rules"实现手指树时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41936513/

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