当前位置:  开发笔记 > 后端 > 正文

读取和计算商数时出错

如何解决《读取和计算商数时出错》经验,为你挑选了1个好方法。

我是一个Rust新手并试图读取两个数字并计算他们的商:

use std::io;

enum Option {
    None,
    Some(T),
}

fn safe_div(n: i32, d: i32) -> Option {
    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错误:类型不匹配:预期Option,找到std::option::Option (预期枚举Option,找到枚举std::option::Option)[E0308]

我在这里错过了什么?



1> Matthieu M...:

默认情况下,任何Rust应用程序都包含前奏.你可以将其关闭,但如果你不这样做,它拉的::std::option::Option类型以及它的变种None,并Some进入活动范围.

除非有人决定使用这些名称创建内容,否则新定义的项目将优先考虑.

你的问题在于你只有一半的标准Option:

你定义的Option,优先于::std::option::Option

你没拉None,并Some在同一个范围(它们嵌套在Option范围内),而::std::option::Option::{None, Some}通过前奏是有

其结果是,Option::Option消磨NoneSome参考::std::option::Option::None::std::option::Option::Some分别.一团糟.

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

enum Option {
    None,
    Some(T)
}

use Option::{None, Some};

另一个不是要重新定义Option.

一旦你应用了任何一个修复程序,你就会意识到你将字符串作为参数传递给safe_div你,你可以用它.parse().expect("Expected i32")来解析它们作为整数.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有