Рассмотрим такой код:
fun equals(a : 'a,b : 'a) =
a = b;
Мой код больше, но это проблема. SML сообщает «Ошибка: оператор и операнд не согласуются».
Я полный новичок в SML и не понимаю, почему он жалуется. Это что-то похожее на проблему C #, что вы не можете сравнивать два значения любого типа, но вы должны использовать компаратор равенства по умолчанию для этого типа? Должен ли я добавить ограничение на 'a
(надеюсь, я правильно написал его как общий тип)?
1 ответ
Вместо 'a
используйте ''a
.
Тип с двумя кавычками перед ним вместо одной является типом равенства, что означает, что с ним работает оператор =
. Это также означает, что вы не можете вызывать свою функцию для вещей, которые не являются типами равенства.
Кроме того, на самом деле вам не нужно писать типы. Если вы просто сделаете:
fun equals (a,b) = a = b;
SML определит тип.
Похожие вопросы
Новые вопросы
generics
Обобщения — это форма параметрического полиморфизма, встречающаяся в ряде языков, включая языки .NET, Java, Swift, Rust и Go (начиная с версии 1.18).