看到Vec.join的用法,感到疑惑
assert_eq!(["hello", "world"].join(" "), "hello world");
按照这里的文档里面写的,join返回的应该是个 &str
吧
但是实际上这个join返回的是个String。
是只有这两个类型特殊吗?还是也存在其他的 assert_eq!
不区分特殊的类型?
1
共 3 条评论, 1 页
看到Vec.join的用法,感到疑惑
assert_eq!(["hello", "world"].join(" "), "hello world");
按照这里的文档里面写的,join返回的应该是个 &str
吧
但是实际上这个join返回的是个String。
是只有这两个类型特殊吗?还是也存在其他的 assert_eq!
不区分特殊的类型?
评论区
写评论多谢
--
👇
Pikachu: 首先看一下
assert_eq!
的文档,发现它使用PartialEq
这个trait进行比较。然后看一下
String
的文档,发现String
实现了PartialEq<&'a str>
。这样就可以得出结论了:实现了
PartialEq
这个trait的两个类型之间,都可以用assert_eq!
进行比较。最后补充一下,join是slice类型的方法,不是Vec类型的方法。
Rust 里面几乎不可能不区分类型。Rust 的类型系统离不开 trait、泛型、引用这些关键概念。 如果没理解这些基础的内容,就去读透 Rust Book 。
楼上给了正确思考和找问题的步骤,Rust 的学习曲线已经很陡峭了,所以要想熟练查找文档必须有扎实的基本功。
首先看一下
assert_eq!
的文档,发现它使用PartialEq
这个trait进行比较。然后看一下
String
的文档,发现String
实现了PartialEq<&'a str>
。这样就可以得出结论了:实现了
PartialEq
这个trait的两个类型之间,都可以用assert_eq!
进行比较。最后补充一下,join是slice类型的方法,不是Vec类型的方法。