在Clojure中有更好的方法吗?
(if (coll? coll)
(map my-fn coll)
(my-fn coll)
my-fn
将应用于输入coll
。 coll
可以是单数或集合。
如果我不检查coll?
,单独使用map
将抛出IllegalArgumentException,因为不知道如何从xxx创建ISeq。
答案 0 :(得分:4)
您的代码很好(虽然我重命名变量coll,因为您实际上并不知道它是否是一个集合,这可能会让读者感到困惑。)
但是我建议这整段代码看起来很像代码味道 - 它在动态类型上有点太过/在我看来试图有点过于聪明:在“cleverness considered harmful的意义上”
需要考虑的其他想法:
答案 1 :(得分:1)
如果coll
不包含任何嵌套序列:
(map my-fn (flatten (list coll)))
答案 2 :(得分:1)
不存在通用解决方案,因为my-fn
可能是一个获取列表并返回列表的函数。然后你不能以某种方式检查输入并决定是否映射它。
最好不要让自己陷入不知道自己拥有什么类型数据的情况,但如果不了解您的计划,我无法就此提出任何具体建议。