2014-09-23 9 views
4

У меня есть следующие определения типов в моем коде:Преобразование имени конструктора в строку в OCaml

type tag = 
| Head 
| Title 
| Body 
| H1 
| P;; 

type domtree = 
| Empty 
| Node of tag * string * domtree list;; 

мне нужно напечатать метки вместе со строками. Но я не смог найти способ конвертировать тег (имена конструктора в определении первого типа) в строки и объединить их со строковой частью domtree. Есть ли какой-либо конкретный способ сделать это? Оказывает ли OCaml способ преобразования нестрочных типов в строки? Я нашел здесь подобный вопрос, но я не совсем понял это.

+3

Прежде всего, вы не должны катавать свое собственное дерево DOM, вы должны просто использовать библиотеку, которая уже делает это. Во-вторых, посмотрите на 'ppx_deriving', так как он делает именно это. –

+1

На самом деле в одном из моих заданий было определено тип domtree. И я новичок в Ocaml, поэтому я не должен использовать ppx_deriving. – Ruwangi

+3

Вы должны написать его прямо тогда, 'let to_string = function | Голова -> «голова» | ... '. – nlucaroni

ответ

5

В OCaml нет такого объекта, и вам нужно будет написать функцию преобразования tag_to_string : tag -> string.

Легко сформировать тело этой строки автоматически, например, использовать этот sed Однострочник:

sed -e 's/\| \(.*\)/| \1 -> "\1"/' 

и вставить определение тега в стандартном вводе. Это дает

| Head -> "Head" 
| Title -> "Title" 
| Body -> "Body" 
| H1 -> "H1" 
| P;; -> "P;;" 

и вы просто должны очистить ;;.

Существует множество других решений для определения этого шаблона кода, я также люблю использовать для этого макросы Emacs.

 Смежные вопросы

  • Нет связанных вопросов^_^