在 Clojure 中是否有更好的方法来做到这一点?
(if (coll? coll)
(map my-fn coll)
(my-fn coll)
my-fn
将应用于输入 coll
。 coll
可以是单一的也可以是集合。
如果我不检查 coll?
,单独使用 map
会抛出 IllegalArgumentException,因为不知道如何从 xxx 创建 ISeq。
最佳答案
你的代码很好(尽管我会重命名变量 coll,因为你实际上不知道它是否是一个集合,这可能会让读者感到困惑)。
但是,我建议这整 block 代码看起来可疑地像代码味道 - 在我看来,动态类型有点太过分/试图变得有点太聪明:从“cleverness considered harmful”的意义上来说。
要考虑的替代想法:
- 编写单独的函数来处理集合和单个值。理由是它们在概念上是不同的数据类型,因此应该进行不同的处理。
关于dictionary - 映射接受单数或集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029395/