У меня есть код, который выглядит следующим образом:Как получить промежуточные результаты с каждого этапа многоступенчатой функции конвейера?
this.GetItemTypeIdsAsListForOneItemTypeIdTreeUpIncludeItemType itemType.AutoincrementedId
|> Array.map (fun i -> i.AutoincrementedId)
|> Array.map (BusinessLogic.EntityTypes.getFullSetOfEntityTypeFieldValuesForItemTypeAid item.Autoincrementedid)
|> Array.fold Array.append [||]
|> Array.map (fun fv -> { fv with ReferenceAutoId = aid })
|> Array.toSeq
|> Seq.distinctBy (fun fv -> fv.Fieldname)
|> Seq.toArray
Иногда такой код получает необычный результат, который мне нужно объяснить. Обычно в коде отсутствует ошибка. В данных есть ошибка. И мне нужно объяснить, почему этот набор данных неверен. Каков наилучший способ сделать это?
Я просто хочу посмотреть список на каждом шаге этого выражения.
Что-то вроде:
func data
|> func2 && Console.WriteLine
|> func3 && Console.WriteLine
....
Получить вход, разделить его на две части. Передайте один из выходных данных следующей функции и второй вывод на консоль.
Обычно в коде отсутствует ошибка. В данных есть ошибка. И мне нужно объяснить, почему этот набор данных неверен. – demas
У вас заголовок и вопрос вводят в заблуждение. Вы просите о помощи в отладке, но затем спросите, как лучше всего провести тестирование. То, как я это сделаю, это рассматривать его как состав функций и проверять каждую функцию отдельно. Если ваш тест звучит, то составление функций не должно приводить к неожиданным результатам, например. ошибок. Подумайте об этом так для математики, у вас есть функция a + b * c^d - fx/gx. Вы проверили бы +, -, *, /,^и функции f и g отдельно. Из математики вы уверены, что выражение работает, даже если это композиция более простых функций/выражений. –
Вы видели [Железнодорожное ориентированное программирование] (https://fsharpforfunandprofit.com/posts/recipe-part2/)? –