rust MyStruct:Debug中的有界结构体实现什么< V>?

hfyxw5xn  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(115)

你为什么要

#[derive(Debug)]
struct Inner<V> {
    value: V,
}

struct MyStructA<V>
where
    Inner<V>: Debug,
    V: Debug,
{
    value: V,
}

而不是仅仅

struct MyStructB<V>
where
    V: Debug,
{
    value: V,
}

我特别感兴趣的是where Inner<V>: Debug添加了什么值而不是where V: Debug。编译器更关心这一点的原因是什么呢?或者这只是为了人类文档?除非我弄错了,否则where Inner<V>: Debug似乎没有添加任何额外的边界。

fn main() {
    let my_struct_a = MyStructA {
        value: Inner { value: 23 },
    };

    let my_struct_a_with_inner = MyStructA { value: 49 };

    let my_struct_b = MyStructB { value: 64 };

    let my_struct_b_with_inner = MyStructB {
        value: Inner { value: 23 },
    };
}

Playground with the code.

cygmwpex

cygmwpex1#

不,它没有添加任何边界。它说Inner<V>实现Debug-当V实现Debug时会发生这种情况,所以它与第二个边界相同。它可能是为了文档而做的。

相关问题