![]() |
1
114
在Clojure 1.2中,你可以破坏
任何东西 您可以在销毁Clojure映射的同时在函数的参数列表中进行,如上图所示。包括使用:或为如下参数定义默认值:
但这是在clojure 1.2。或者,在旧版本中,您可以这样做来模拟相同的事情:
一般来说,这也是同样的方法。 您还可以在关键字参数之前使用位置参数:
这些不是可选的,必须提供。
你可以破坏
即使在Clojure 1.1中也可以这样做。不过,关键字参数的映射样式销毁只在1.2中出现。 |
![]() |
2
33
除了Raynes出色的回答之外,还有 a macro in clojure-contrib 这使生活更容易: user=> (use '[clojure.contrib.def :only [defnk]]) nil user=> (defnk foo [a b :c 8 :d 9] [a b c d]) #'user/foo user=> (foo 1 2) [1 2 8 9] user=> (foo 1 2 3) java.lang.IllegalArgumentException: No value supplied for key: 3 (NO_SOURCE_FILE:0) user=> (foo 1 2 :c 3) [1 2 3 9] |
![]() |
3
0
你是说 命名参数 ?这些不是直接提供的,但您可以 use this vectors approach 如果你愿意,这可以给你想要的。 At RosettaCode 关于如何使用破坏来实现这一点有一个更深入的解释。 |
![]() |
4
0
从Clojure 1.8版开始,关键字支持似乎还有点 无聊的 . 可以这样指定关键字参数:
调用它的示例:
如果要为这些关键字参数指定默认值:
在第二种情况下,这会达到预期效果:
每种语言的每一部分都有利弊,但为了进行比较,这就是您在普通Lisp中如何做相同的事情:
|
![]() |
developer2015 · 基于序列输入值的clojure映射转换 6 月前 |
![]() |
Freid001 · 具有最小和最大限制的架构? 7 年前 |
![]() |
phlie · Hoplon With Castra加载后端时出错 7 年前 |