我有一些代码:
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
的方法会不会简单地panic ?或者铁 rust 编译器会发现它吗?
我有一些代码:
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
的方法会不会简单地panic ?或者铁 rust 编译器会发现它吗?
你可以读到这个:
impl<K, V> Database<K, V>
where
K: Eq + Hash,
V: Clone,
{
// methods
}
以下是:
只要
K
实现Eq + Hash
,V
实现Clone
,就为Database<K, V>
实现这些方法.
如果不满足这些约束,那么这些方法将不存在,并且如果您try 调用它们,您将看到编译错误.
这些约束与类型本身上的约束不同.如果您可以构造该类型的实例,则这些只会产生影响.实际上,省略对类型本身的所有约束并只在impl
个块上使用它们是很常见的.