【发布时间】:2018-02-20 14:24:01
【问题描述】:
此代码无法编译:
fn ref_on_int<T>(_: T) where T: AsRef<i32> {}
fn main() {
ref_on_int(&0_i32)
}
因为
the trait bound `i32: std::convert::AsRef<i32>` is not satisfied
为什么会这样?
这可能很有用,例如像这样的新类型
struct MyInt(i32);
impl AsRef<i32> for MyInt {
/* etc. */
}
那么您可以无所谓地传递i32 上的引用或MyInt 上的引用,因为在内存中我们在这两种情况下都有i32。
【问题讨论】:
-
我认为这就是
Borrow的用途。我不完全确定AsRef和Borrow之间的区别,但后者是为&T实现的。 -
@rodrigo 哦,好的。您可以将其发布为答案吗?
-
@rodrigo
AsRef似乎在这里更合适,因为第二个示例包括转换。 -
@ljedrz 对不起,这不是目标,我会改变我的问题。
标签: rust