gpt4 book ai didi

rust - 将 Add 实现应用于借用的参数

转载 作者:行者123 更新时间:2023-11-29 08:12:51 25 4
gpt4 key购买 nike

我正在尝试添加实现 Add 的通用类型的两个借用参数.我的实际方法更复杂,但我的问题的本质被这个简化的例子所捕获:

pub fn my_add<T: Add<Output = T>>(a: &T, b: &T) -> T
{
a + b
}

我收到一条错误消息说 +不能应用于类型 &T .

我的想法是,虽然我已经指出 AddT 实现, 我没有说明它是为 &T 实现的.但是,如果我将函数声明更改为 my_add<&T: Add...>编译器提示它需要一个标识而不是 & .我试过把 &在许多不同的位置,但无济于事。

我在这里错过了什么?

最佳答案

首先,如果您检查 documentation for Add ,您会看到它被定义为按值获取参数。不幸的是,您不能简单地取消引用 ab,因为这需要移出不可变引用,这是不允许的。

有两种方法可以解决这个问题:您可以添加一个绑定(bind)到 TClone,如下所示:

pub fn my_add<T: Add<Output = T> + Clone>(a: &T, b: &T) -> T
{
a.clone() + b.clone()
}

...或者您可以首先按值获取 ab:

pub fn my_add<T: Add<Output = T>>(a: T, b: T) -> T
{
a + b
}

顺便说一句,您不能添加随机印记来键入参数名称;如果你想要比提供基本约束更复杂的东西,你需要一个 where 子句,如下所示:

fn made_up_nonsense<T>(a: T) -> T where &T: SomeTrait, T: SomeOtherTrait {
...
}

关于rust - 将 Add 实现应用于借用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958259/

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