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

为什么不能在表达式中使用...语法?

魏誉
2023-03-14

我正在尝试理解...语法。考虑以下程序:

fn how_many(x: i32) -> &'static str {
    match x {
        0 => "no oranges",
        1 => "an orange",
        2 | 3 => "two or three oranges",
        9...11 => "approximately 10 oranges",
        _ => "few oranges",
    }
}

fn pattern_matching() {
    for x in 0..13 {
        println!("{} : I have {} ", x, how_many(x));
    }
}

fn main() {
    // println!("{:?}", (2...6));
    pattern_matching();
}

在上面的程序中,模式匹配中使用的9...11编译正常。当我尝试在likeprintln!("{:?}", (2...6))中使用相同的代码时;我得到编译错误:

error: `...` syntax cannot be used in expressions
  --> src/main.rs:18:24
   |
18 |     println!("{:?}", (2...6));
   |                        ^^^
   |
   = help: Use `..` if you need an exclusive range (a < b)
   = help: or `..=` if you need an inclusive range (a <= b)

我试图理解为什么不能在println中使用。

共有1个答案

沈旻
2023-03-14

因为同样的原因,你不能使用

太长别读:

  • 每个人都不喜欢特定的语法

错误消息告诉您要使用的适当语法:

   = help: Use `..` if you need an exclusive range (a < b)
   = help: or `..=` if you need an inclusive range (a <= b)
fn how_many(x: i32) -> &'static str {
    match x {
        0 => "no oranges",
        1 => "an orange",
        2 | 3 => "two or three oranges",
        9..=11 => "approximately 10 oranges",
        _ => "few oranges",
    }
}

fn pattern_matching() {
    for x in 0..13 {
        println!("{} : I have {} ", x, how_many(x));
    }
}

fn main() {
    println!("{:?}", 2..=6);
    pattern_matching();
}

 类似资料:
  • 问题内容: 我正在阅读有关Java 8的教程,作者在 其中显示了代码: 然后说 无法从lambda表达式内访问默认方法。以下代码无法编译: 但是他没有解释为什么这是不可能的。我运行了代码,但出现了错误, 不兼容的类型:公式不是功能界面` 那么为什么不可能或错误的含义是什么呢? 该接口满足具有一种抽象方法的功能接口的要求。 问题答案: 这或多或少是范围的问题。从JLS 与出现在匿名类声明中的代码不同

  • 我知道使用lambda expression(LE)我们可以节省一些代码行,比如为函数接口创建对象。而且LE将更易读。但我确信这并不是提供该功能的主要原因。我在google上搜索,并在本文中找到了这段有趣的引用 在Java8之前,处理任何集合的元素都可以通过从集合中获取迭代器,然后迭代元素,然后处理每个元素来完成。如果需要并行处理这些元素,那么将由客户端代码完成。随着Java 8中Stream A

  • 问题内容: 我们在其他语言中认为是理所当然的,并且几乎期望它可以继续工作,但不会起作用-这样做是如此自然,所以为什么编译器不满意?只是有时候感觉就像不耐烦。 递增值的唯一方法是将其放在单独的行中? http://play.golang.org/p/_UnpZVSN9n 问题答案: 而在golang声明,不表达

  • PEP 572引入了为Python 3.8实现的赋值表达式(俗称Walrus操作符)。这似乎是一个非常重要的新特性,因为它将允许在理解和lambda函数中进行这种形式的赋值。 赋值表达式的语法、语义学和语法规范到底是什么? 为什么在PEP 379中关于“添加赋值表达式”的类似想法之前遭到拒绝的情况下,引入了这个新的(似乎相当激进的概念)?

  • 问题内容: 我升级到Java 8,并尝试用新的lamdba表达式替换Map中的简单迭代。循环搜索空值,如果找到一个,则引发异常。旧的Java 7代码如下所示: 我将其转换为Java 8的尝试如下所示: 谁能解释为什么此处不允许该声明以及如何更正该声明? Eclipse的快速修复建议对我来说并不正确……它只是在语句周围加上了一个块: 问题答案: 不允许抛出检查异常,因为接口中的方法未在其子句中声明任

  • 问题内容: 为什么下面的代码: 给出错误: 在循环外继续 问题答案: 失败是switch语句的标准行为,因此,在switch语句中使用Continue没有意义。Continue语句仅在for / while / do..while循环中使用。 根据我对您意图的理解,您可能想写: 我还建议您将默认条件放在最后。 编辑:continue语句不能在switch语句中使用并不完全正确。(带有理想标记的)