|
|
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中如何做相同的事情:
|