我有一个有两个泛型的结构
pub struct Rectangle<T, U> {
height: T,
width: U,
}
使用impl块
impl< T, U> Rectangle<T, U>
{
pub fn new(height: T, width: U) -> Self {
Self { height, width }
}
pub fn area(&self) -> &U {
&self.width * &self.height // Error: cannot multiply `&U` by `&T`
}
}
即使在穆尔impl之后也不起作用
如果删除ref(&),工作正常。
我认为最有效的方法是传递引用而不是复制。我怎样才能使这段代码编译引用。Code with ref
1条答案
按热度按时间mf98qq941#
问题是你假设
&i32
实现了Mul<&i32, Output = &i32>
。它没有。虽然有一个类似的实现输出i32
。因此,为了解决这个问题,我们更改了trait绑定和函数签名,然后修复了较小的生命周期错误。
既然我已经给出了解决方案,我建议您不要担心复制琐碎的类型。我认为引用在这种情况下更昂贵,除非你正在做一些奇怪的数学,其中T和U不是简单的数字,而是一些自定义结构,你实现了
Mul
,但我怀疑它。首先,指针被放置在堆栈上,大小可能是64位,并且它们需要被解引用来执行操作,这比仅仅将值放置在堆栈上要慢,堆栈的大小甚至可能比指针小,并且它们不需要被解引用。