Почему мой оператор OCaml "=" применяется только к int? - PullRequest
0 голосов
/ 13 апреля 2020

Я использую vscode с расширениями "OCaml и Reason IDE"

Вот мой результат в utop:

utop # 1. = 1. ;;    
Line 1, characters 0-2:
Error: This expression has type float but an expression was expected of type
             int

А также для String:

utop # "Me" = "Me";;
Line 1, characters 0-4:
Error: This expression has type string but an expression was expected of type
         int

То же самое для всего, кроме int:

utop # 2 = 2 ;;
- : bool = true

">" "<" также имеют тот же симптом. Я не знаю, что на самом деле происходит. Может кто-нибудь мне помочь ? Большое спасибо! </p>

1 Ответ

3 голосов
/ 13 апреля 2020

Возможно, вы используете библиотеку JaneStreet Base. Возможно, вы импортировали его так:

open Base;;

База пытается ограничить исключения для функций с явным суффиксом _exn, поэтому она затеняет встроенный полиморф c равенство (=), что может вызвать исключение для некоторых входных данных (например, если вы сравниваете структуры, содержащие функции).

Вы можете получить равенство полиморфи c обратно следующим образом:

let (=) = Poly.(=);;

Или вы можете использовать его с местный импорт: Poly.(x = y).

Есть плюсы и минусы сравнения полиморфов c. Похоже, консенсус заключается в том, что использование мономорфного c сравнения (например, String.equal, et c) является более надежным выбором, даже если оно менее удобно.

...