我正在使用the official guides尝试Clojure。这是我对该链接的问题8的解决方案,即编写一个函数opposite
,它应该模仿complement
函数:
(defn opposite [f] (fn [& args] (not (apply f args))))
为了进行比较,这里是complement
的源代码:
(defn complement
"Takes a fn f and returns a fn that takes the same arguments as f,
has the same effects, if any, and returns the opposite truth value."
{:added "1.0"
:static true}
[f]
(fn
([] (not (f)))
([x] (not (f x)))
([x y] (not (f x y)))
([x y & zs] (not (apply f x y zs)))))
现在,我的实现似乎只在几个参数的简单情况下工作,例如
user=> (def unequal (opposite =))
#'user/unequal
user=> (unequal 1 2)
true
user=> (unequal 1 1)
false
所以我的两部分问题是:
opposite
功能是否等同于complement
,还是仅仅是<Tooltip title="Tooltip Test">
<Select value={this.state.age} onChange={this.handleChange}
inputProps={{ name: "age", id: "age-simple" }}
>
<MenuItem value="">
<em>None</em>
</MenuItem>
<MenuItem value={10}>Ten</MenuItem>
<MenuItem value={20}>...</MenuItem>
</Select>
</Tooltip>
看起来像吗?即是确定数量的前三个案例
参数确实有必要? 提前致谢(冰雹友好!)。
答案 0 :(得分:3)
为了提高效率,Clojure源代码突破了0,1和2个arg案例。他们基本上已经预先编译了#34; 3个特例,加上一个普通案例。
您的代码是完全合法的,并且除非已经测量到性能瓶颈,否则它是首选的。已证明(或者您正在编写像clojure.core
这样的编译器/库。)