当我不满足trait限制时会发生什么?

3

我有一些代码:

impl<K, V> Database<K, V>
where
    K: Eq + Hash,
    V: Clone,

我有一个定义如下的数据库(Database)

pub struct Database<K, V>
where
    K: Eq + Hash,

请注意,V 上没有特性限定。我的问题是,如果我构建一个实例使得 V: !Clone,那么依赖于 V: Clone 的方法会简单地引发崩溃吗?还是说 Rust 编译器会捕捉到这个错误?

4
你如果尝试一下会发生什么? - mkrieger1
1个回答

4

你可以阅读这个:

impl<K, V> Database<K, V>
where
    K: Eq + Hash,
    V: Clone,
{
    // methods
}

实现这些方法应用于Database<K, V>,只有当K实现了Eq + Hash,且V实现了Clone时。

如果这些约束条件不被满足,则这些方法将不存在,如果您尝试调用它们,就会看到编译错误。

这些约束条件与类型本身的约束条件不同,后者仅影响您是否可以构造该类型的实例。通常情况下,省略类型本身上的所有约束条件,并将它们仅放置在impl块中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接