1

除了类似的东西

(fn [& {:keys [more the-rest]}] ,,,)

有没有办法同时使用可变数量的参数和关键字参数,例如

(my-function arg1 arg2 some-other-args :opt1 opt1 :opt2 opt2)

?

4

1 回答 1

2

你可以定义你的函数以任何你喜欢的方式接受参数,但你会遇到的问题是如何区分模棱两可的情况,例如:

(my-function arg1 arg2 arg3 arg4)
(my-function arg1 arg2 key1 val1)

为了区分差异,您需要编写代码以在运行时检查参数(例如检查第三个参数是否为关键字)。这会很快变得丑陋。

因此,我不建议沿着这条路线走。要考虑的替代方案:

  • 简化您的功能。如果您有这么多参数,则可能意味着您在单个函数中“完成”了太多。
  • 将所有键/值参数作为单个映射传递
于 2012-07-05T09:10:34.777 回答