Извините, если этот вопрос не имеет никакого смысла.
В настоящее время я нахожусь в процессе написания небольшого приложения и хочу объединить в цепочку некоторые функции, которые образуют более широкие вычисления.
Так, например, у меня есть функция, которая вызывает веб-сервис и возвращает hash-map
в результате или nil
, если произошла ошибка или что-то пошло не так.Следующая функция в цепочке берет карту и выполняет дальнейшую обработку, а затем передает ее следующей функции ... и так далее.
Дело в том, что если первая функция завершится ошибкой, она передаст nil
следующей функции, которая выдаст нулевой указатель (или любой другой), и я не хочу, чтобы он даже достиг этой стадии.Другими словами, я хочу, чтобы все вычисления потерпели неудачу в случае сбоя одного элемента в цепочке.
например,
;successful computation = function1 returns W -> function2 returns X -> function3 returns Y -> function4 returns Z -> Z
;failed computation = function1 returns W -> function2 returns X -> function3 returns nil -> nil
(-> (function1 "http://webservice.com") (function2) (function3) (function4))
Дело в том, что я не хочу засорять каждую из своих функцийс if(nil? arg)
в начале, в идеале я бы хотел абстракцию, которая могла бы позаботиться об этом для меня, но я не совсем понял, что доступно в Clojure
Я думал о принятии стиля ScalaOption
тип, который может быть Some(value)
или None
, но мне все равно нужно засорять мой код этими проверками в начале
Любые идеи или ответы будут действительно приветствоваться