rust - 如何在 Rust 嵌套之外获取变量变化?

标签 rust

嘿,我对 Rust 和整个编程真的很陌生,我遇到了一些以前从未遇到过的问题。我试图将用户输入变量的结果返回到嵌套之外的屏幕,但我似乎没有任何运气。

use std::{thread, time::Duration};

fn main(){
    let mut modifer = 0;
    let mut ModValue=0;
    let mut ModReason = "";

    let Y = "Y";
    let y = "y";
    let N = "N";
    let n = "n";

    print!("{esc}c", esc = 27 as char);
    let mut ModYN = String::new();
    println!("Are there any modifiers (Y/N)");
    std::io::stdin().read_line(&mut ModYN).unwrap();
    let ModYN = ModYN.trim();

    if ModYN == y || ModYN == Y{
        ModValue = 1;
        print!("{esc}c", esc = 27 as char);
        let mut modifer:f32=0.0;
        let mut input = String::new();
    
        //I'm attempting to get the input from the user to define a modifer reason and value
        println!("Please enter the modifer: ");
        std::io::stdin().read_line(&mut input).expect("Not a valid string");
        modifer = input.trim().parse().expect("Not a valid number");

        let mut ModReason = String::new();
        println!("Whats the modifer reason: ");
        std::io::stdin().read_line(&mut ModReason).unwrap();
        let ModReason = ModReason.trim();
    }
    //Then print those results to the screen outside of nesting
    print!("{esc}c", esc = 27 as char);
    println!("-Modifer-");
    println!("{}",&mut modifer);
    println!("-Modifer Reason-");
    println!("{}",&mut ModReason);
    thread::sleep(Duration::from_secs(5));
}

我尝试了很多事情;从将其分配为可变变量或借用变量本身到甚至将嵌套扩展到打印结果之外。但我碰壁了,真的需要一些帮助。

最佳答案

您的代码中有几个缺陷,由于您的问题只涉及一个,所以我将只解释那个。这意味着下面的代码不会编译。但它会让您更接近解决方案。

我认为你的问题来自于你不知道 let var = valuevar = value 之间的区别。这些是非常不同的语句:第二个将 value 分配给 var,而第一个创建一个新变量(用相同的变量隐藏一个变量名称,如果有的话),然后分配给它。与

let var;
var = value;

因此,当您在循环中创建一个新变量 ModReason 时,您并没有修改循环外的变量:您实际上是在创建一个新变量,只是为了在循环结束时销毁它if 语句(不使用它)。所以解决方案是不要每次都创建一个新变量:

use std::{thread, time::Duration};

fn main(){
    let mut modifer = 0;
    let mut ModValue=0;
    let mut ModReason = "";

    let Y = "Y";
    let y = "y";
    let N = "N";
    let n = "n";

    print!("{esc}c", esc = 27 as char);
    let mut ModYN = String::new();
    println!("Are there any modifiers (Y/N)");
    std::io::stdin().read_line(&mut ModYN).unwrap();
    let ModYN = ModYN.trim();

    if ModYN == y || ModYN == Y{
        ModValue = 1;
        print!("{esc}c", esc = 27 as char);
        let mut modifer:f32=0.0;
        let mut input = String::new();
    
        //I'm attempting to get the input from the user to define a modifer reason and value
        println!("Please enter the modifer: ");
        std::io::stdin().read_line(&mut input).expect("Not a valid string");
        modifer = input.trim().parse().expect("Not a valid number");

        ModReason = String::new();
        println!("Whats the modifer reason: ");
        std::io::stdin().read_line(&mut ModReason).unwrap();
        ModReason = ModReason.trim();
    }
    //Then print those results to the screen outside of nesting
    print!("{esc}c", esc = 27 as char);
    println!("-Modifer-");
    println!("{}",&mut modifer);
    println!("-Modifer Reason-");
    println!("{}",&mut ModReason);
    thread::sleep(Duration::from_secs(5));
}

如果你没有通过传递一个可变变量来打印 ModReason,Rust 会警告你(因为,通过这种方式,你永远不会在循环之外分配给 ModReason)借用(这绝对没用:只需使用 println!("{}", ModReason);)。

此外,Rust 很可能已经就几个未使用的变量警告过您:如果您阅读这些警告,您就会明白您做错了什么。

关于rust - 如何在 Rust 嵌套之外获取变量变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72326696/

相关文章:

rust - 如何从闭包修改闭包外的值?

generics - 访问通用结构中的字段

rust - "expected value, found trait"是什么意思?

rust - AddAssign 和 '+=' 运算符之间的关系

rust - 在 Rust 中调用泛型类型的方法

rust - 如何返回包含通用值的向量

rust - 在没有克隆或复制的情况下初始化盒装切片

macros - 具有不同类型的可变参数的宏

rust - 值 "does not live long enough",但仅在使用函数指针时

rust - 深度优先树搜索期间的多个可变借用