Types 读取错误&;计算商
我是一名铁锈新手,尝试阅读两个数字并计算它们的商:Types 读取错误&;计算商,types,rust,Types,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 inpu
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),
}
}
使用std::io;
枚举选项{
没有一个
一些(T),
}
fn安全分区(n:i32,d:i32)->选项{
如果d==0{
不返回任何值;
}
返回部分(不适用);
}
fn main(){
println!(“请输入您的分子。”);
让mut分子=String::new();
io::stdin()
.read_行(&mut分子)
.expect(“读取行失败”);
println!(“请输入您的分母。”);
让mut分母=String::new();
io::stdin()
.读取行(&mut分母)
.expect(“读取行失败”);
匹配安全分区(分子、分母){
None=>println!(“不能被零除!”),
一些(v)=>println!(“商为{}”,v),
}
}
但当我试图编译它时,以下错误重复了好几次:
src/safe_div.rs:12:12:21错误:不匹配的类型:
预期的选项
,
找到std::option::option
(预期的枚举选项
,
找到枚举std::option::option
)[E0308]
我在这里遗漏了什么?您不需要定义选项
;是的。删除该定义,它将通过该错误。下一个错误是,您有一个字符串
,试图将其用作数字
我强烈建议你回去再读一遍。第一章,特别是猜谜游戏,正是针对这一层次的介绍。您不需要定义选项
;是的。删除该定义,它将通过该错误。下一个错误是,您有一个字符串
,试图将其用作数字
我强烈建议你回去再读一遍。前几章,特别是猜谜游戏,正是针对这一层次的介绍。默认情况下,任何Rust应用程序都包括序曲。您可以关闭它,但如果不关闭,它会将
::std::option::option
类型及其变体None
和Some
拉入范围
除非有人决定使用这些名称创建某些内容,否则新定义的项目将优先
这里的问题是,您对标准的选项只有一半的阴影:
- 您定义了
选项
,它优先于::std::Option::Option
- 您没有将
None
和Some
拉入相同的作用域(它们嵌套在选项
作用域中),而::std::Option::Option::{None,Some}
通过前奏在那里
结果是,选项
分别指::选项
,而无
和部分
分别指::std::Option::Option::None和::std::Option::Option::Some
。一团糟
如果确实需要覆盖,一种解决方案是自己导入None
和Some
:
enum Option<T> {
None,
Some(T)
}
use Option::{None, Some};
enum选项{
没有一个
一些(T)
}
使用选项:{None,Some};
另一个是不重新定义选项
一旦应用了这两个修复程序,您就会意识到您正在将字符串作为参数传递给safe\u div
,您可以使用.parse().expect(“预期的i32”)
将它们作为整数进行解析。默认情况下,任何Rust应用程序都包括前奏。您可以关闭它,但如果不关闭,它会将::std::option::option
类型及其变体None
和Some
拉入范围
除非有人决定使用这些名称创建某些内容,否则新定义的项目将优先
这里的问题是,您对标准的选项只有一半的阴影:
- 您定义了
选项
,它优先于::std::Option::Option
- 您没有将
None
和Some
拉入相同的作用域(它们嵌套在选项
作用域中),而::std::Option::Option::{None,Some}
通过前奏在那里
结果是,选项
分别指::选项
,而无
和部分
分别指::std::Option::Option::None和::std::Option::Option::Some
。一团糟
如果确实需要覆盖,一种解决方案是自己导入None
和Some
:
enum Option<T> {
None,
Some(T)
}
use Option::{None, Some};
enum选项{
没有一个
一些(T)
}
使用选项:{None,Some};
另一个是不重新定义选项
应用任一修复后,您将意识到您正在将字符串作为参数传递给safe\u div
,您可以使用.parse().expect(“Expected i32”)
将它们解析为整数。@wogsland请继续阅读我的答案。第一段中只有三句话,第三句话描述了这个错误。@wogsland因为这是一个专业程序员的网站,我希望目标读者能够阅读语言或框架的介绍性文档,并能够用较小的组件编写较大的解决方案。此外,我还链接了一个关于如何解析字符串的现有答案;您希望回答者为您编写所有代码吗?简要说明:爱好者和专业程序员网站;)@沃格斯兰请继续阅读我的答案。第一段中只有三句话,第三句话描述了这个错误。@wogsland因为这是一个专业程序员的网站,我希望目标读者能够阅读语言或框架的介绍性文档,并能够用较小的组件编写较大的解决方案。此外,我还链接了一个关于如何解析字符串的现有答案;您是否希望应答者编写所有代码