当前位置: 首页 > 知识库问答 >
问题:

错误读取

帅德惠
2023-03-14

我是一名铁锈新手,尝试阅读两个数字并计算它们的商:

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错误:不匹配类型:预期选项

我错过了什么?


共有2个答案

太叔京
2023-03-14

您不需要定义选项;它已经是标准库的一部分了。删除该定义,它将通过该错误。下一个错误是,您有一个字符串,试图将其用作数字,而没有首先对其进行解析。

我强烈建议你回去再读一遍《生锈编程语言》。第一章,尤其是猜谜游戏,正是针对这一级别的介绍。

范瀚昂
2023-03-14

默认情况下,任何防锈应用程序都包括prelude。您可以将其关闭,但如果不关闭,它会拉入::std::option::option

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

您在这里的问题是,您只对标准Option进行了一半的阴影处理:

  • 您定义了Option,它优先于::std::选项::Option
  • 您没有将某些拉入相同的范围(它们嵌套在Option范围中),而::std::选项::选项::{无,一些}通过前奏

结果是,选项分别指::选项,而部分分别指::std::Option::Option::None和::std::Option::Option::Some。一团糟。

如果确实需要覆盖,一种解决方案是自己导入NoneSome

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

use Option::{None, Some};

另一个是不重新定义选项

一旦应用了这两个修复,您就会意识到您正在将字符串作为参数传递给safe\u div,您可以使用。parse()。expect(“Expected i32”)将它们解析为整数。

 类似资料:
  • 我正在尝试使用Spring Data Redis绝地组合连接到AWS ElastiCache Redis。[Redis Cluster enabled,因此它有Cluster Config endpoint,有3个碎片-每个碎片有1个主节点和2个副本节点] 读取超时错误。 AWS Redis服务器版本:5.0.3/群集模式:已启用/SSL:已启用/Auth:已启用(通过密码) 库——Spring数

  • 本章解释使用SystemTap过程中常见的错误信息。

  • 我收到错误: 错误类型错误: 无法读取在评估 (webpack-internal:///./node_modules/@angular/common/esm5/http.js:163) 处未定义的属性 “长度”在 Array.forEach () 在 httpHeaders.lazyInit (webpack-internal:///./node_modules/@angular/common/e

  • 所有消息的尾部都有2个字节的crc。11 b5表示消息开始。消息长度应为36字节。72 b5是另一个消息开始标记。112字节长度。73 b5也是消息标记。36字节。请找到蓝色下划线:这是一条好消息。小红胖胖的红是不好的。它是37字节长度。我有一个额外的字节和crc不匹配。下一个好的(绿色)。下一个坏消息。它是114字节而不是112字节,当然crc不匹配。 这是我的代码:

  • Logcat错误 这是我使用robospice的代码 注意:这些相同的代码可以很好地运行一些json输出,一些不同类型的json,我得到了这个错误,我试图找出json结构的确切位置,但我感觉两者都是一样的,所以我很困惑,同时我喊出了这个错误的原因

  • 我试图在Xamarin android中读取一个视频文件,以便将其转换为string64。 我成功地处理了非常小的文件(3秒钟),但如果文件更大(1分钟),我会出现OutOfMemory错误。 我尝试在清单文件中添加Android:largeHeap=“true”Android:hardwareAccelerated=“false”,并修改代码以读取视频文件,但仍然存在问题。 未能分配134217