为什么“让true = false”失败,并且真的有可能做到吗?

时间:2018-09-10 18:11:53

标签: rust pattern-matching keyword

有可能使这项工作吗?我本来想看看是否可以重新定义true,然后看到true实际上是一个关键字。

是否可以“修复”模式错误并获得“您无法分配关键字错误”?

fn main() {
    let true = false;
}

我得到:

error[E0005]: refutable pattern in local binding: `false` not covered
 --> src/main.rs:2:9
  |
2 |     let true = false;
  |         ^^^^ pattern `false` not covered

Playground

2 个答案:

答案 0 :(得分:5)

错误消息没有问题。您在let绑定中使用refutable pattern,而let仅允许使用不可辩驳的模式。

换句话说,当您这样做时:

let variable = value

您没有为变量分配值。您正在创建一个绑定,其中左侧与右侧的内容匹配。这应该是无可辩驳的模式,因为匹配必须始终成功。

答案 1 :(得分:2)

我不确定您要做什么或为什么要 去做!如果一种语言允许您重新定义truefalse,大多数人会认为这是设计缺陷,而且我敢肯定,这至少是The Daily WTF的一部分。 >

  

是否可以“修复”模式错误并获得“您无法分配关键字错误”?

常量定义不允许使用模式,因此通过尝试将true重新定义为const可以得到一个不同的错误:

const true: bool = false;

哪个会产生与您所经历的错误更相似的错误:

error: expected identifier, found keyword `true`
  --> src/main.rs:1:7 
  | 
1 | const true: bool = false;
  | ^^^^ expected identifier, found keyword