我想创建一个有条件添加成员的对象.简单的方法是:
var a = {};
if (someCondition)
a.b = 5;
Run Code Online (Sandbox Code Playgroud)
现在,我想写一个更惯用的代码.我在尝试:
a = {
b: (someCondition? 5 : undefined)
};
Run Code Online (Sandbox Code Playgroud)
但现在,b
是a
其价值的成员undefined
.这不是理想的结果.
有方便的解决方案吗?
更新
我寻求一个可以处理几个成员的一般情况的解决方案.
a = {
b: (conditionB? 5 : undefined),
c: (conditionC? 5 : undefined),
d: (conditionD? 5 : undefined),
e: (conditionE? 5 : undefined),
f: (conditionF? 5 : undefined),
g: (conditionG? 5 : undefined),
};
Run Code Online (Sandbox Code Playgroud) 您将如何在JavaScript中实现多个数组的笛卡尔积?
举个例子,
cartesian([1, 2], [10, 20], [100, 200, 300])
Run Code Online (Sandbox Code Playgroud) 抱歉'svn'风格 - 我们正处于从SVN迁移到GIT(包括我们的CI Jenkins环境)的过程中.
我们需要的是能够让Jenkins结帐(或者我应该说克隆?)GIT项目(存储库?)到一个特定的目录中.我们已经尝试了一些refspecs魔术,但是理解和使用成功并不是很明显.
此外,如果在同一个Jenkins项目中我们需要在项目根目录下将几个私有GitHub存储库签出到几个单独的目录中,我们怎么能这样做呢?
我们安装了GitHub插件.希望我们把事情说得对.
在clojure中,关键字评估自己,例如:
>>:test
:test
Run Code Online (Sandbox Code Playgroud)
它们不接受任何参数,并且它们不受任何限制.那么,为什么我们需要在命名空间中限定关键字?
我知道isa
使用derive
需要命名空间限定的关键字(例如::test
)创建层次结构.是否还有其他需要将关键字放在命名空间中的情况?
在clojure
,apply
不能应用于宏.例如,(apply and [true false])
引发异常.我正在考虑以下解决方法:
(defmacro apply-macro[func args] `(~func ~@args))
Run Code Online (Sandbox Code Playgroud)
乍一看,它看起来效果很好:
(apply-macro and [true 5]); 5
(apply-macro and [true 5 0]); 0
(let [a 0] (apply-macro and [true a])); 0
Run Code Online (Sandbox Code Playgroud)
但是,当我向它传递一个指向向量的变量时,它就崩溃了.
(let [a [true]] (apply-macro and a)); java.lang.IllegalArgumentException:
;Don't know how to create ISeq from: clojure.lang.Symbol
Run Code Online (Sandbox Code Playgroud)
多么令人失望!!!!
知道怎么解决apply-macro
?
在结束时,我们如何应用and
或任何其他宏到列表?
这不起作用:
(apply and '(true false))
Run Code Online (Sandbox Code Playgroud)
因为apply
不能取宏的价值.
那么,检查列表中所有元素是否为真的最佳方法是什么?
在Clojure中,我想将几个映射组合成一个映射,其中具有相同键的映射被组合到一个列表中.
例如:
{:humor :happy} {:humor :sad} {:humor :happy} {:weather :sunny}
Run Code Online (Sandbox Code Playgroud)
应该导致:
{:weather :sunny, :humor (:happy :sad :happy)}
Run Code Online (Sandbox Code Playgroud)
我想过:
(merge-with (comp flatten list) data)
Run Code Online (Sandbox Code Playgroud)
但它效率不高,因为flatten具有O(n)复杂度.
然后我提出:
(defn agg[x y] (if (coll? x) (cons y x) (list y x)))
(merge-with agg data)
Run Code Online (Sandbox Code Playgroud)
但这感觉不是惯用的.还有其他想法吗?
阿div
与"position: fixed"
被嵌入到一个父div
.当父母旋转或翻译时,孩子div
也会移动.
这是一个错误吗?我希望孩子div
能够保持固定.
HTML片段:
<div id="mask">
<div id="page">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
请访问:http://jsfiddle.net/PseKK/
我知道我可以通过对孩子应用逆向转换来修复它,div
但出于性能原因,在我的实际场景中,我正在寻找一种不涉及额外转换的解决方案.
任何想法如何克服?
在clojure中,我想编写一个尾递归函数,为后续调用记忆其中间结果.
[编辑:这个问题已被重写gcd
,而不是使用factorial
.]
记忆gcd
(最大公约数)可以像这样实现:
(def gcd (memoize (fn [a b]
(if (zero? b)
a
(recur b (mod a b))))
Run Code Online (Sandbox Code Playgroud)
在此实现中,不会为后续调用记忆中间结果.例如,为了计算,称为中间结果.但是,没有存储在memoized函数的缓存中,因为递归点是未被记忆的匿名函数.gcd(9,6)
gcd(6,3)
gcd(6,3)
recur
因此,如果在打电话后gcd(9,6)
,我们打电话说gcd(6,3)
我们不会从备忘录中受益.
我能想到的唯一解决方案是使用普通的递归(明确地调用gcd
而不是recur
),但是我们不会从尾部调用优化中受益.
有没有办法实现两者:
F#
.在这里,我正在寻找答案clojure
.如何使用匿名函数文字(#())在clojure中编写身份函数?
以下代码不起作用:
(#(%) 5)
Run Code Online (Sandbox Code Playgroud)
它引发了一个异常,因为它被转换为:
((fn[x] (x)) 5)
Run Code Online (Sandbox Code Playgroud)
问题在于,当使用#()时,函数体用括号括起来.任何想法,如何优雅地克服这个?
clojure ×6
javascript ×3
algorithm ×1
css ×1
git ×1
github ×1
html ×1
hudson ×1
jenkins ×1
keyword ×1
memoization ×1
namespaces ×1
recursion ×1
webkit ×1