【发布时间】:2012-11-09 03:53:25
【问题描述】:
我目前正在处理我的第一个 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 语句来一直跟踪错误,但这似乎也不是很有趣。是我遗漏了什么简单的东西还是这只是一个丑陋的问题?
【问题讨论】: