rust - 不匹配的类型错误:预期的 `char`,找到参考
问题描述
代码片段是:
use std::collections::HashSet;
fn main() {
let dna = String::from("ACCCX");
let dict: HashSet<char> = vec!['A', 'C', 'G', 'T'].into_iter().collect();
println!("{}", dna.chars().all(|&x| dict.contains(x)));
}
编译中显示的错误是:
error[E0308]: mismatched types
--> src/main.rs:6:37
|
6 | println!("{}", dna.chars().all(|&x| dict.contains(x)));
| ^--
| ||
| |expected due to this
| expected `char`, found reference
| help: did you mean `x`: `&char`
|
= note: expected type `char`
found reference `&_`
不知道为什么&x
不能推断&char
和我提到的链接是:
- https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.all
- https://doc.rust-lang.org/std/collections/struct.HashSet.html#method.contains
谢谢!
解决方案
错误消息有点令人困惑,本质上它是倒退的。
dna.chars().all(|&x| dict.contains(x)));
String::chars 返回 a char
, not &char
,而 HashSet::contains 期望引用它包含的类型,所以&char
. 但是,闭包|&x| dict.contains(x)
期望引用某种类型。
这有点令人困惑,但&argument_name
在函数参数中基本上对传入参数执行模式匹配,取消引用它。这与编写|(a, b)|
一个带有两个元素元组并立即将其解构为两个变量的闭包相同。
所以真正的信息应该是Expected reference &_, found char
。
推荐阅读
- angular - 放大配置文件生产
- angular - 即使导入了 CommonModule,Angular 9 *ngIf 也不是 div 的已知属性
- dataframe - 使用 Dask 数据帧的 Autosklearn 预测/ Autosklearn 对 dask 数据帧的支持
- python - 在 Python 中将资源 ID 从 ADAL 转换为 MSAL
- xcode - Xcode:如何为“调试”和“发布”设置不同的 Bundle Id
- google-cloud-platform - 谷歌云错误将外部IP分配给实例
- c# - 如何使用 .NET 将字符串附加到从 blob 派生的 JSON 字符串?
- google-cloud-firestore - 使用谷歌应用引擎部署 fastai 模型
- reactjs - 如何从现有路由器调用另一个路由器路径
- pip - 在 Debian Buster 上使用 pip 和 pipenv 安装软件包时收到错误消息