首页 > 解决方案 > 如何使用 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`

标签: genericsrust

解决方案


您的函数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);
}

也可以看看:


推荐阅读