我知道这已经有一段时间了,我发现了很多关于它的讨论,但是我没有得到最终的方法来完成它:管道,stdout和stderr.在bash中,这将是简单的:
cmd 2>&1 | cmd2
Run Code Online (Sandbox Code Playgroud) 在Clojure中有一个非常方便的函数,它被称为format.众所周知,它能够轻松模拟字符串.该功能通常在大多数编程语言中可用.
我发现ClojureScript没有实现这个功能,我有点恼火.据我所知,它是在旧版本中实现的,但最新版本不包含该功能.
谁知道这是否有原因?
使用下划线函数groupBy,可以按其元素的某个属性对数组进行分组.结果是一个对象,其键值对如下:group>对应的数组片段.
var words = ['Hey', 'Hii', 'Salut'],
grouped = _.groupBy(words, 'length');
Run Code Online (Sandbox Code Playgroud)
分组看起来像这样:
{
'3': ['Hey', 'Hii'],
'5': ['Salut']
}
Run Code Online (Sandbox Code Playgroud)
这将是一种简单而安全的迭代方法,例如从最高长度开始,然后是下一个最低长度.这有效:
_.each( _.toArray(grouped).reverse(), function(v) {
console.log(v);
} );
Run Code Online (Sandbox Code Playgroud)
但我认为这并不完全正确,因为对象是无序列表,而正确的顺序恰好在这里发生.对此有何评论?
在reduce循环中考虑这个:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱if语句?
是否有惯用/内置方式来翻转传递给Clojure中函数的参数顺序?
正如我在这里用辅助函数的定义:
(defn flip [f & xs]
(apply f (reverse xs)))
(vector 1 2) ; [1 2]
(flip vector 1 2) ; [2 1]
Run Code Online (Sandbox Code Playgroud) 应该限制函数可能执行的次数。所以在调用一个函数之后,在一段时间内任何重复的调用都应该被忽略。如果在此期间有 where 调用,则应在时间段之后执行最后一个。
这是我使用 core.async 的方法。这里的问题是,额外的调用正在通道 c 中汇总。我需要一个内部只有一个位置的通道,它将被 put 覆盖!每次。
(defn throttle [f time]
(let [c (chan 1)]
(go-loop []
(apply f (<! c))
(<! (timeout time))
(recur))
(fn [& args]
(put! c (if args args [])))))
Run Code Online (Sandbox Code Playgroud)
用法:
(def throttled (throttle #(print %) 4000))
(doseq [x (range 10)]
(throttled x))
; 0
;... after 4 seconds
; 9
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
(defn throttle [f time]
(let [c (chan (sliding-buffer 1))]
(go-loop []
(apply f (<! c))
(<! (timeout time))
(recur))
(fn …Run Code Online (Sandbox Code Playgroud) 在Clojure中,可以通过函数的帮助迭代序列,for或类似地使用doseq副作用并将nil作为返回值:
(doseq [x (range 3)]
(prn x))
; 0
; 1
; 2
Run Code Online (Sandbox Code Playgroud)
对于序列无限的情况,有一种方法可以引入中断条件:
(doseq [x (range) :while (< x 3)]
(prn x))
Run Code Online (Sandbox Code Playgroud)
这将产生与上面相同的输出.
作为专业,当您使用多个序列时,会有一个非常有趣的行为.正如文档所称:"集合以嵌套方式迭代,最快速".
(doseq [x (range 3) y (range 3)]
(prn x y))
; 0 0
; 0 1
; 0 2
; 1 0
; 1 1
; 1 2
; 2 0
; 2 1
; 2 2
Run Code Online (Sandbox Code Playgroud)
但是,如果序列再次无限,会发生什么.当最后一个是无限的时,它运作得很好.这将像以前的例子一样工作:
(doseq [x (range 3) y (range) :while (< y 3)]
(prn x y)) …Run Code Online (Sandbox Code Playgroud) 以下代码是否会抛出错误?
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("somethingwrong");
Run Code Online (Sandbox Code Playgroud)
在铬中,它只返回null.
如果浏览器知道请求的渲染上下文怎么样?(比如"webgl"或"experimental-webgl")是否有可能出现错误异常?在铬中,我无法引发这种行为.
换句话说:我是否需要将此代码包装在库中的try/catch中,以便干净地检查渲染上下文?
有没有办法可以客观化这个?例如,通过Web服务尝试在不同浏览器中剪切的代码并列出它们可能不同的结果.
假设我有一个固定的大小div,其中包含3个divs:
#container {
width: 100px;
height: 100px;
}
#a,
#c {
height: 20px;
}
#b {
height: 60px; // this should be a generic value...
}Run Code Online (Sandbox Code Playgroud)
<div id="container">
<div id="a">A</div>
<div id="b">B</div>
<div id="c">C</div>
</div>Run Code Online (Sandbox Code Playgroud)
如何让#bdiv自动拉伸.
这三个div的(#a,#b,#c)应填满整个height的#container.
在环服务器内部处理 http 请求时,请求数据的主体存储在 key 中的 request-hashmap 中:body。例如如下:
#object[org.eclipse.jetty.server.HttpInputOverHTTP 0x2d88a9aa "HttpInputOverHTTP@2d88a9aa"]
Run Code Online (Sandbox Code Playgroud)
如果我只对原始文本感兴趣,我如何读出这个对象?