首页 > 解决方案 > 如何使任何类型的parms生锈

问题描述

我将read_inputcrate 添加到我的依赖项中并编写了以下代码:

let username: String = input().repeat_msg("Please input your name: ").get();

当我尝试在终端中打印它时,它会打印我输入的内容,但是当我尝试通过一个函数使用它时:

pub fn sub(values: String) {
  //  code
}

我不能接受它,它说()当它在 top 中明确表示时我已经给了它一个类型变量String,所以我想知道我是否可以通过转换或某种方式从输入中获取文本,或者在函数中能够获取任何类型的参数。

所以我想知道一种在函数中获取任何类型参数的方法,它可以是 ai32或 aString或如何将()类型变量转换为String.

完整代码

maint.rs:

use read_input::prelude::*;
mod sub;
use sub::lexar;

fn main() {
    println!("Welcome Rice Lang");
    let mut done = false;
    let ctrldkey = false;
    while !done {
        let mut input: String = input().msg("> ").get();
        println!("{}", input);
        if ctrldkey == true {
            done = true;
        }
    }
}

副:

pub fn sub(values: String) {
    print!("{}", values)
}

错误:

input = sub(input);
        ^^^^^^^^^^^^ expected struct `String`, found `()`

标签: rust

解决方案


您遇到的问题不是您无法调用该函数。如果您尝试这样做:

sub(input);

然后它会工作。这意味着您可以调用该函数。问题是您试图分配input函数返回的内容。但是该函数不返回任何内容,也称为(). 而input变量实际上是 aString所以你只能把 aString放到它上面。

将错误类型分配给变量的示例将给出类似的错误:

let mut input = String::from("example string");

// this gives an error because we are trying to
// put a non-String value into input
input = 6;

要拥有一个返回非()(默认)类型的函数,您必须像这样指定返回类型:

fn this_returns_a_string() -> String {
    String::from("from function")
}

let mut input = String::from("example string");

// this will work
input = this_returns_a_string();

推荐阅读