Почему `let true = false` терпит неудачу, и действительно ли это возможно сделать? - PullRequest
0 голосов
/ 10 сентября 2018

Можно ли сделать эту работу? Изначально я хотел посмотреть, можно ли переопределить 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

Детская площадка

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Нет ничего плохого в сообщении об ошибке. Вы используете опровержимый шаблон в привязке let, а let допускает только неопровержимые шаблоны.

Другими словами, когда вы делаете это:

let variable = value

Вы не присваиваете значение переменной. Вы создаете привязку, где левая сторона соответствует чему-то на правой стороне. Это должен быть неопровержимый образец, потому что совпадение всегда должно быть успешным.

0 голосов
/ 10 сентября 2018

Я не уверен, что вы пытаетесь сделать или почему вы хотите сделать это!Большинство людей сочли бы это недостатком дизайна, если бы язык позволил вам переопределить true и false, и я уверен, что это была тема как минимум одной партии The Daily WTF .

Можно ли "исправить" ошибку шаблонов и получить сообщение об ошибке "невозможно назначить ключевое слово"?

Определения констант donне допускайте паттерны, поэтому вы можете получить другую ошибку, пытаясь переопределить 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 
...