Я пытаюсь создать оператор печати, который может печатать любой тип. Я хочу использовать сопоставление шаблонов типов для достижения этого.F # пытается создать лучший printf
Это не работает:
let print x = match x with | :? int -> printf "INT"; | _ -> None;;
Я получаю сообщение:
пусть печать х = матч х с | :? int -> printf "INT"; | _ -> Нет ;;
----------------------------- ^^^^^stdin (47,30): ошибка FS0008 : Это принудительное принуждение или тест типа от типа 'a до int включает неопределенный тип на основе информации до этой точки программы. Тестирование типа времени выполнения не допускается для некоторых типов. Необходимы дополнительные аннотации.
Итак, я не могу выполнить сопоставление типов по int? Какие другие типы я могу не использовать для сопоставления типов? Что это значит, что нужны дополнительные аннотации типов?
Это означает, что он не может вывести тип «x» из кода, который вы ему дали до сих пор. Ответ Пад должен быть исправлением. Это или вы могли бы просто сделать «% A» в качестве маски для печати. –
Просто, чтобы сделать комментарий @ Onorio более явным: функция, которую вы пытаетесь создать, уже существует: 'printfn '% A" x'. – Benjol