Чтобы добавить в ответ FlorianWeimer, некоторую информацию о вашем сообщении об ошибке.
Warning 10: this expression should have type unit.
Строго напечатан OCaml.Поэтому, если функция возвращает, скажем, целое число или список, и вы ничего с этим не делаете, она спросит, что происходит, и предупредит вас.
Вызов функции, такой как print_int 5;
, возвращает()
типа unit
.По сути это означает, что он ничего не возвращает, потому что вы не вызываете его для вычисления чего-либо, а для выполнения чего-либо.Он сделал это, и теперь он возвращается, и вы идете дальше.
Но вызов функции, такой как float_of_int 5;
, возвращает значение (число с плавающей запятой 5.0
).Вы (вероятно) не призывали это к делать что-то, а вычислять что-то, и то, что он возвращает, вас интересует.То же самое относится к арифметическим выражениям, таким как 3+6;
, или к прямым значениям, таким как 10;
или "abc";
или [];
.
. Поэтому, если вы пишете одну из этих вещей, которая имеет значение, и вы нене используйте это значение (в присваивании или в качестве параметра другой функции), OCaml предупреждает вас.Он говорит вам: «Я вычислил то, что не назначил, не вернул и не использовал в качестве аргумента чего-то другого. Обычно вещи типа unit
являются единственными подобными вещами. Вы уверены, чтов вашем коде нет ошибки? "
Иногда вы знаете, что делаете, и вам не нужно это предупреждение.В этом случае вы можете вызвать функцию ignore
.ignore
возьмет что-нибудь и проигнорирует это, вернув ()
.Например, ignore 5;
или ignore (float_of_int 10);
не будут выдавать предупреждения «это выражение должно иметь единицу измерения», которые вы получите с 5;
или float_of_int 10;
.