OCaml: получить имя типа значения - PullRequest
3 голосов
/ 11 сентября 2011

Возможно напечатать имя значения в OCaml, например, если у меня есть

type my_type =
  | MyType_First of int
  | MyType_Second of string

и затем сделайте что-то вроде:

let my_value = MyType_First 0 in
print_string ("my_value is of type " ^ String.from_type my_value ^ ".\n";

можно ли получить «my_value типа MyType_First».

Спасибо.

Ответы [ 2 ]

8 голосов
/ 12 сентября 2011

Мономорфное решение:

let from_type = function
  | MyType_First _ -> "MyType_First"
  | MyType_Second _ -> "MyType_Second"

Полиморфное решение: нет.(AFAIK, лексические токены, соответствующие конструкторам, не записываются в байт-код / ​​двоичный файл, даже если указаны флаги отладки. Единственное, что можно сделать, это напечатать целочисленный «идентификатор» для конструктора, используя некоторые темные Obj.magic.)

2 голосов
/ 12 сентября 2011

Вам нужна более простая форма универсальной печати , и она недоступна в OCaml как таковой, но существуют некоторые обходные пути - например, получение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...