gpt4 book ai didi

rust - 在Rust中基于用户输入运行功能

转载 作者:行者123 更新时间:2023-12-03 11:41:32 26 4
gpt4 key购买 nike

我是Rust语言的新手,就像通常在尝试使用某种语言时一样,我喜欢经历Euler Project的问题。我想熟悉 cargo 及其提供的一切,因此我创建了一个名为euler-project的 cargo 项目。
在启动时,我希望程序询问用户要运行的解决方案,并让它在与用户请求的解决方案相对应的代码中运行功能。
我想避免if/else if/else块的巨大链式,所以我认为match函数会很好地工作。这就是我所拥有的。

use std::io;

fn main() {

// Solution selection. Every solution will be selectable here
let mut selection = String::new();

// Enum to hold every solved problem number for match control flow
enum Solutions {
P1, P2,
}

loop {
println!("Select the solution you would like to run. (Example: '32' would be Problem 32)");

io::stdin()
.read_line(&mut selection)
.expect("Input should be an integer.");


match selection {
Solutions::P1 => p1(),
Solutions::P2 => p2(),
}
}
}

fn p1() {
println!("p1")

}

fn p2() {

}
当前,这将产生如下错误:
...
21 | match selection {
| --------- this expression has type `std::string::String`
22 | Solutions::P1 => p1(),
| ^^^^^^^^^^^^^ expected struct `std::string::String`, found enum `main::Solutions`
我在这里做错了什么?如果您知道执行此类型控制的更好选择,请向我提出建议。我也很想知道是否存在类似于Python的交互式控制台模式的功能,该模式允许用户在终端中运行代码,并通过简单地键入函数名称并按Enter键来进行函数调用。

最佳答案

您在这里比较苹果和桔子。一方面,您具有从用户那里读取的字符串,另一方面,您具有Solutions类型的值,但是您在任何地方都没有告诉编译器如何比较两者。做您想做的最简单的方法就是直接比较字符串:

match selection.trim() {
"1" => p1(),
"2" => p2(),
_ => panic!("{} does not designate a valid problem!", selection),
}
请注意对 trim的调用: read_line返回的字符串包括结尾的换行符,您需要删除该换行符以便进行比较。
还要注意,您将需要在 selection.clear()之前调用 read_line,否则循环的下一次迭代将追加到字符串中,而不是替换它。

关于rust - 在Rust中基于用户输入运行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64797966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com