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

为什么在将字符串解析为数字时会出现错误“此值的类型必须在此上下文中已知”?

齐修贤
2023-03-14

我不是想写复杂的代码,我只是想了解这里发生了什么(或没有发生什么)。我检查了其他问题,但它们都有复杂的情况,我认为这种情况是迄今为止最简单的。

我有以下代码:

let one_step: f32 = "4.0".parse().unwrap();
let extra_step: u32 = one_step as u32;

println!("{:?}", extra_step);

在我看来,我们有一个

为什么我不能这么做?实际上,这不是一回事吗?

let single_step: u32 = "4.0".parse().unwrap() as u32;

println!("{:?}", single_step);

如果我尝试运行此代码,我得到这个错误:

error[E0619]: the type of this value must be known in this context
 --> src/main.rs:6:27
  |
6 |     let single_step: u32 = "4.0".parse().unwrap() as u32;
  |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

看起来需要我们将操作分成两部分。


共有1个答案

洪增
2023-03-14

问题是,parse不仅仅是为f32定义的parse可以定义所有类型(特别是实现FromStr的任何类型)。那么Rust怎么知道parse应该返回f32,而不是其他类型的呢?

在第一个示例中,它知道这一点,因为oneStep声明为具有类型f32,所以Rust可以推断它应该调用parse,并将f32作为其类型参数。在第二个示例中,f32没有在代码中提到,因此Rust不可能找到它。

您也可以直接传递它,而不是从变量的类型推断类型参数。这样,它将在一个步骤中工作:

let singleStep: u32 = "4.0".parse::<f32>().unwrap() as u32;
 类似资料:
  • 问题内容: SimpleDateFormat: 抛出的异常: 有任何想法吗? 编辑: 感谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我可能应该把它称为一天。 问题答案: 从SimpleDateFormat javadocs : 月:如果图案字母的数目为3或更多,则将月份解释为文本;否则,将其解释为数字。 尝试使用“ MMM dd yyyy”之类

  • 我在代码中收到“必须是数组类型,但它解析为字符串”错误。它还说i(在下面的代码中)不能解析为我没有得到的变量。 } 你们能帮我找出问题所在吗?我是Java编码的新手,所以我对这种格式还不完全满意。 非常感谢,朱奈德

  • 我正在尝试将命令存储在队列中,并在以后从队列中读取它们。我使用这个队列是因为代码需要在Arduino上运行。当访问第一个(或任何)字符时,我得到一个分段错误。我在这里做错了什么? 谢谢你的帮助! PS:这招管用:

  • 问题内容: 我正在尝试使用DB2运行一个简单的SQL语句,并且遇到了一些问题。我想在txt / db2文件中有一个脚本,并让引擎处理所有命令 这是脚本: 当我运行db2 -f / pathtofile时,我得到: 我究竟做错了什么?我的脚本有问题吗?另外,为什么没有“;”也能正常工作 我的陈述结尾处的终止符? 谢谢, 问题答案: 可能会有帮助, http://www.uc.edu/R/r25/do

  • 问题内容: 有人知道什么是“不良状态线”吗? 编辑:我尝试了许多服务器,许多URL的,我仍然收到此错误? 问题答案: 从httplib(Python 2) 的文档(在Python 3中 称为http.client)中: 例外 :( 例外 :) 的子类。 在服务器响应我们不理解的HTTP状态代码时引发。 我运行了相同的代码,但未收到错误: 我想只是仔细检查所有内容,然后重试?

  • 问题内容: 当我执行以下代码时,输​​出为“ nullHelloWorld”。Java如何处理null? 问题答案: 您正在尝试将值连接到。这由“字符串转换”控制,当一个操作数是a时发生,该转换被JLS的5.1.11节覆盖: 现在只需要考虑参考值: 如果引用为null,则将其转换为字符串“ null”(四个ASCII字符n,u,l,l)。