< 返回版块

jamesmarva 发表于 2021-06-15 01:38

Tags:String,&str

看到Vec.join的用法,感到疑惑

assert_eq!(["hello", "world"].join(" "), "hello world");

按照这里的文档里面写的,join返回的应该是个 &str 吧 但是实际上这个join返回的是个String。 是只有这两个类型特殊吗?还是也存在其他的 assert_eq! 不区分特殊的类型?

评论区

写评论
作者 jamesmarva 2021-06-15 17:07

多谢

--
👇
Pikachu: 首先看一下assert_eq!的文档,发现它使用PartialEq这个trait进行比较。

然后看一下String的文档,发现String实现了PartialEq<&'a str>

这样就可以得出结论了:实现了PartialEq这个trait的两个类型之间,都可以用assert_eq!进行比较。

最后补充一下,join是slice类型的方法,不是Vec类型的方法。

苦瓜小仔 2021-06-15 09:08

Rust 里面几乎不可能不区分类型。Rust 的类型系统离不开 trait、泛型、引用这些关键概念。 如果没理解这些基础的内容,就去读透 Rust Book

楼上给了正确思考和找问题的步骤,Rust 的学习曲线已经很陡峭了,所以要想熟练查找文档必须有扎实的基本功。

Pikachu 2021-06-15 02:02

首先看一下assert_eq!的文档,发现它使用PartialEq这个trait进行比较。

然后看一下String的文档,发现String实现了PartialEq<&'a str>

这样就可以得出结论了:实现了PartialEq这个trait的两个类型之间,都可以用assert_eq!进行比较。

最后补充一下,join是slice类型的方法,不是Vec类型的方法。

1 共 3 条评论, 1 页