我可以编写一个接受X
和&X
的函数:
fn foo<T: Borrow<X>>(x: T)
我可以编写一个接受X
,Y
和&Y
的函数,假设在Into
上实现了Borrow<Y>
特征:
fn foo<T: Into<X>>(x: T)
有没有办法编写一个仅使用标准特征接受X
,&X
,Y
和&Y
的函数?我可以使用自定义特征来做到这一点,但使用标准特性会更好。
我试过了:
use std::borrow::Borrow;
fn foo<TT: Into<T>, T: Borrow<X>>(x: TT) {}
struct X;
fn main() {
foo(X);
}
但我明白了:
error[E0283]: type annotations required: cannot resolve `_: std::borrow::Borrow<X>`
--> src/main.rs:8:5
|
8 | foo(X);
| ^^^
|
= note: required by `foo`
答案 0 :(得分:4)
这是不允许的,因为可能有多条路径。例如,传入的类型可能会实现Into<A>
和 Into<B>
。如果A
和B
同时实施Borrow<X>
,那么哪种转换适当就不明确。
正如错误消息所述,您可以使用类型注释(a.k.a. turbofish )告诉编译器您希望转换为哪种中间类型:
foo::<_, X>(X);