Печать пользовательских типов в Ocaml - PullRequest
0 голосов
/ 08 февраля 2019

Я определяю новый тип, который в основном является строкой.Как напечатать значение?

# type mytp = Mytp of string;;
type mytp = Mytp of string
# let x = Mytp "Hello Ocaml";;
val x : mytp = Mytp "Hello Ocaml"
# print_endline x;;
Error: This expression has type mytp but an expression was expected of type
         string
# 

На этот вопрос уже есть ответ здесь .Существует еще один вопрос , похожий на этот, который я прошел до того, как задал вопрос, однако мне было непонятно (возможно, потому, что я новичок. Другие новички могут столкнуться с аналогичной путаницей). Как решить эту проблему?проблема из принятого ответа.

1 Ответ

0 голосов
/ 08 февраля 2019

Тип print_endline - string -> unit.Таким образом, вы не можете передать значение типа mytp.

Вы можете написать функцию для вывода значения типа mytp:

let print_mytp (Mytp s) = print_endline s

Вы можете написать функцию для преобразования mytp в строку:

let string_of_mytp (Mytp s) = s

Затем вы можете напечатать так:

print_endline (string_of_mytp x)

OCaml не позволит вам использовать mytp там, где ожидается строка, или наоборот.Это функция, а не ошибка.

...