小编Tho*_*mas的帖子

在`assert_eq!()`中使用`as_ref()`时需要输入注释

我在我的代码中使用了新的通用转换特性,体验了人体工程学的减少.AsRef<str> for [Ascii]正如您在示例中看到的那样,有问题的代码实现了.

现在我想使用v.as_ref()in assert_eq!()并期望使用提供的实现v.as_ref()返回a &str,因为第二个参数assert_eq!()是type &str.

没有实现,AsRef<String> for [Ascii]在我看来只有一个实现PartialEq发挥作用:PartialEq<str> for &str.

编译器不遵循我的解释并抱怨所需的类型注释.如何避免显式注释,为什么编译器无法找出正确的实现AsRef<_>

谢谢

#![feature(convert)]

struct Ascii { chr: u8 }

impl AsRef<str> for [Ascii] {
    fn as_ref(&self) -> &str {
        unsafe { ::std::mem::transmute(self) }
    }
}

fn main() {
    let v = [Ascii { chr: 65 }, Ascii { chr: 66 }];
    assert_eq!(v.as_ref(), "AB");
    // Workaround: explicit type annotation.
    //assert_eq!(AsRef::<str>::as_ref(&v[..]), …
Run Code Online (Sandbox Code Playgroud)

type-inference traits rust

5
推荐指数
1
解决办法
1242
查看次数

标签 统计

rust ×1

traits ×1

type-inference ×1