Печать F # дискриминационный союз - PullRequest
7 голосов
/ 17 сентября 2011

Я пишу программу на F #, которая анализирует строку в тип AST, который является дискриминируемым объединением.

Когда я использую fsi (в Mono + Mac OS X) для запуска моего кода, AST распечатывается в хорошем формате.Но когда я использую printfn "%s" <| ast.ToString(), я получаю что-то вроде FSI_0002.Absyn+clazz.Написание метода ToString для всех различающихся типов объединений было бы большой работой.

Как сделать так, чтобы значение печаталось так, как это делает fsi

Ответы [ 3 ]

9 голосов
/ 17 сентября 2011

Вы пробовали printfn "%A" ast?Спецификатор %A учитывает StructuredFormatDisplayAttribute [MSDN] , если имеется.

1 голос
/ 11 апреля 2015

Чтобы преобразовать различающееся объединение в строку, вы должны использовать sprintf "%A" ast вместо ast.ToString ().

Если вы хотите Enum.GetName , вы можете использовать Microsoft.FSharp.Reflection пространство имен. См. Что такое эквивалент Enum.GetName для члена объединения F #? .

0 голосов
/ 17 сентября 2011

В дополнение к комментарию Даниэля, здесь есть хорошая статья в блоге, объясняющая, как ее отформатировать так, как вы пожелаете:

http://blogs.msdn.com/b/dsyme/archive/2010/01/08/some-tips-and-tricks-for-formatting-data-in-f-interactive-and-a-in-sprintf-printf-fprintf.aspx

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