Статическая проверка типов на предмет объединения типов и сопоставления с образцомPython

Программы на Python
Anonymous
Статическая проверка типов на предмет объединения типов и сопоставления с образцом

Сообщение Anonymous »

В функциональных языках, таких как Ocaml/Haskell/… я могу ввести что-то вроде:

Код: Выделить всё

type expr =
| Nb of float
| Add of expr * expr
| Soust of expr * expr
| Mult of expr * expr
| Div of expr * expr
| Opp of expr

let rec eval x = match x with
| Nb n -> n
| Add (e1, e2) -> (eval e1) +. (eval e2)
| Soust (e1, e2) -> (eval e1) -. (eval e2)
| Mult (e1, e2) -> (eval e1) *. (eval e2)
| Div (e1, e2) -> (eval e1) /. (eval e2)
| Opp n -> -. (eval n)
И как только мой код скомпилируется, мне будет гарантировано, что для любого x типа expr eval x всегда будет выдавать результат типа плавать. Это, в частности, означает, что мое сопоставление с образцом не забывало ни одного случая, поэтому, если позже я добавлю новый элемент в тип expr, он не сможет скомпилироваться, пока я не добавлю этот новый случай в сопоставление с образцом.
К сожалению, я не могу найти в Python ничего, что давало бы такую ​​надежную гарантию, в том числе в системе типизации Python 10… Я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/783 ... n-matching

Вернуться в «Python»