Отладка кода F # и функционального стиля - PullRequest
23 голосов
/ 23 апреля 2010

Я новичок в функциональном программировании и у меня есть несколько вопросов, касающихся стиля кодирования и отладки.

У меня сложилось впечатление, что следует избегать сохранения результатов вызовов функций в переменной temp, а затем возвращать эту переменную

, например

let someFunc foo =
    let result = match foo with
                 | x -> ...
                 | y -> ...
    result 

И вместо этого сделайте это так (может быть, я далеко?):

let someFunc foo =
    match foo with
    | x -> ...
    | y -> ...

Что отлично работает с точки зрения функциональности, но затрудняет отладку. У меня нет возможности проверить результат, если правая часть -> делает что-то интересное.

Так, как я должен иметь дело с такого рода сценариями?

Ответы [ 4 ]

23 голосов
/ 11 февраля 2011

Чтобы проверить середину конвейера, я предлагаю следующий обходной путь:

Поместите этот код в какое-то место:

[<AutoOpen>]
module AutoOpenModule

#if DEBUG
let (|>) value func =
  let result = func value
  result
#endif

Включите «Ввод свойств и операторов в управляемый код»:

https://msdn.microsoft.com/en-us/library/cc667388(v=vs.100).aspx

Теперь вы сможете войти в оператор трубопровода.

11 голосов
/ 23 апреля 2010

Любой способ приемлем, так как вы просто привязываетесь к локальной неизменной переменной.

Хотя есть одна загвоздка. Если вы используете его как часть рекурсивного цикла, использующего хвостовые вызовы, тот, который использует переменную temp, исключит хвостовой вызов, и, следовательно, у вас будет увеличение стекового пространства.

5 голосов
/ 23 апреля 2010

Возможность увидеть возвращаемое значение функции в VS является давним запросом.Другие значения промежуточного выражения тоже;например, в F # вы часто хотите проверить середину конвейера, что трудно сделать.В том смысле, что функциональное программирование означает «меньше именованных переменных и локальных элементов» и «большие выражения», это оказывает негативное влияние на текущее поколение отладчиков.(С другой стороны, с такими вещами, как меньшая изменчивость и большая абстракция, мы надеемся, что вы проводите меньше времени в отладчике.)

Есть еще много способов улучшения отладчиков будущего ...

См. Также

Уменьшают ли некоторые конструкции функционального программирования возможность отладки?

4 голосов
/ 23 апреля 2010

Я бы не стал стрелять в тебя, если бы ты использовал темп, но я также не стал бы ограничивать свой стиль, если бы мне не пришлось смотреть что-то в режиме отладки.

Кроме того, отладка подобных вещей намного проще с помощью визуального отладчика Visual Studio 2010, поскольку вы можете использовать точки останова внутри каждого возможного выражения соответствия. Есть также быстрые часы и другие замечательные функции.

Список последних функций отладчика Visual Studio: http://msdn.microsoft.com/en-us/library/01xdt7cs.aspx

...