我目前正在从事我的第一个 clojure 重大项目,并且遇到了关于编码风格和最“clojure-esque”的做事方式的问题。基本上我有一个我正在编写的函数,它接受一个数据结构和一个模板,该函数将尝试将数据结构按摩到其中。模板结构将如下所示:
{
:key1 (:string (:opt :param))
:key2 (:int (:opt :param))
:key3 (:obj (:tpl :template-structure))
:key4 (:list (:tpl :template-structure))
}
每个键都是一个原子,将在给定的数据结构中搜索,它的值将尝试与模板结构中给定的类型匹配。例如,它会查找:key1
并检查它是否是一个字符串。返回值将是一个映射,它:key1
指向给定数据结构中的值(函数可能会根据给定的选项更改值)。
在这种情况下,:obj
它接受另一个模板结构,并在该值和模板结构上递归调用自己,并将结果放在返回中。但是,如果出现错误,我希望直接返回该错误。
同样,对于列表,我希望它基本上再次对函数进行映射,除非出现我想直接返回的错误。
我的问题是处理这些错误的最佳方法是什么?一些简单的异常处理将是最简单的方法,但我觉得它不是最实用的方法。我可以尝试用大量的 if 语句来一直跟踪错误,但这似乎也不是很有趣。有什么简单的我错过了,或者这只是一个丑陋的问题?