gpt4 book ai didi

types - 读取和计算商数时出错

转载 作者:行者123 更新时间:2023-11-29 08:22:26 25 4
gpt4 key购买 nike

我是 Rust 新手,我正在尝试读入两个数字并计算它们的商:

use std::io;

enum Option<T> {
None,
Some(T),
}

fn safe_div(n: i32, d: i32) -> Option<i32> {
if d == 0 {
return None;
}
return Some(n / d);
}

fn main() {
println!("Please input your numerator.");
let mut numerator = String::new();
io::stdin()
.read_line(&mut numerator)
.expect("Failed to read line");
println!("Please input your denominator.");
let mut denominator = String::new();
io::stdin()
.read_line(&mut denominator)
.expect("Failed to read line");
match safe_div(numerator, denominator) {
None => println!("Can't divide by zero!"),
Some(v) => println!("Quotient is {}", v),
}
}

但是当我尝试编译它时,我多次收到以下错误:

src/safe_div.rs:12:12: 12:21 error: mismatched types: expected Option<i32>, found std::option::Option<i32> (expected enum Option, found enum std::option::Option) [E0308]

我在这里错过了什么?

最佳答案

默认情况下,任何 Rust 应用程序都包含序曲。您可以将其关闭,但如果不这样做,它会拉入 ::std::option::Option<T>。类型及其变体 NoneSome进入范围。

除非有人决定使用这些名称创建一些东西,在这种情况下,新定义的项目优先。

这里的问题是你只对标准 Option 进行了半遮蔽。 :

  • 你定义了Option , 它优先于 ::std::option::Option
  • 你没有拉NoneSome进入同一范围(它们嵌套在 Option 范围内),而 ::std::option::Option::{None, Some}有没有前奏

结果是 Option::Option同时NoneSome引用::std::option::Option::None::std::option::Option::Some分别。一团糟。

如果您真的想要覆盖,一个解决方案是导入 NoneSome你自己:

enum Option<T> {
None,
Some(T)
}

use Option::{None, Some};

另一个是不重新定义Option .

应用任一修复程序后,您将意识到您正在将字符串作为参数传递给 safe_div , 你可以使用 .parse().expect("Expected i32")将它们解析为整数。

关于types - 读取和计算商数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704575/

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