generics - 如何使用 rust 中的通用函数修复错误
问题描述
我试图理解 Rust 中的泛型。我无法理解这里出了什么问题
fn say<T>(msg: &T) {
let slen = msg.chars().count();
if slen > 0 {
println!("Char Count {} " ,slen);
}
}
fn main() {
let msg = String::from("Hello World from Rust!!!");
say::<String>(&msg);
}
编译错误:
error[E0599]: no method named `chars` found for reference `&T` in the current scope
--> hell.rs:4:20
|
4 | let slen = msg.chars().count();
| ^^^^^ method not found in `&T`
解决方案
您的函数say
假定输入具有chars
创建迭代器的方法chars
。这适用的类型并不多,因此使其通用化似乎不是很有用。
具有chars
迭代器方法的主要两种类型是String
和&str
。如果您将参数更改为,&str
那么您可以接受其中任何一个:
fn say(msg: &str) {
let slen = msg.chars().count();
if slen > 0 {
println!("Char Count {} ", slen);
}
}
fn main() {
let msg: String = String::from("Hello World from Rust!!!");
say(&msg);
let msg: &str = "Hello World from Rust!!!";
say(msg);
}
也可以看看:
推荐阅读
- django - 如何在 Django 模型中设置字段常量
- python - for in for 循环(for 并行工作)
- java - 如何在 Spring Mail 集成中启用 IMAPFolder 读写模式
- java - E/RecyclerView:没有附加适配器;跳过布局 D/OpenGLRenderer: eglDestroySurface = 0x730c9a02d0
- javascript - 用户离开页面/刷新时跟踪表单更改
- node.js - 对Node js的两个括号功能感到困惑
- python - 如何修复 Python 在 MySQL 数据库中输入错误的值
- bash - 如何使用 gawk 将文本包装在列中
- android - 是否必须将 ListView.Builder 小部件放置在单独的页面上
- javascript - 在 setInterval 中调用函数会导致本机反应错误