相关疑难解决方法(0)

测试列表是否包含Clojure中的特定值

在Clojure中测试列表是否包含给定值的最佳方法是什么?

特别是,这种行为contains?目前令我感到困惑:

(contains? '(100 101 102) 101) => false
Run Code Online (Sandbox Code Playgroud)

我显然可以编写一个简单的函数来遍历列表并测试相等性,但肯定有一种标准的方法可以做到这一点吗?

clojure data-structures

154
推荐指数
9
解决办法
6万
查看次数

执行超时功能

在一个时间限制内执行函数的惯用方法是什么?就像是,

(with-timeout 5000
 (do-somthing))
Run Code Online (Sandbox Code Playgroud)

除非do-something返回5000以内抛出异常或返回nil.

编辑:在有人指出它之前,

clojure(with-timeout ... macro)

但随着这一点,未来继续执行,在我的情况下不起作用.

clojure

17
推荐指数
4
解决办法
4631
查看次数

优雅地退出Clojure core.async循环杀死

我有一个顶级的core.async go循环.我希望它无限期地运行,至少直到我用CTRL-C或杀死或类似信号来阻止它.我目前正在使用java.lang.Runtime/addShutdownHook,如下所示:

(ns async-demo.core
  (:require [clojure.core.async :as async
             :refer [<! >! <!! timeout chan alt! go]]))
(defn run [] (go (loop [] (recur))))
(.addShutdownHook (Runtime/getRuntime) (Thread. #(println "SHUTDOWN")))
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 如果我启动REPL (run)然后它启动并在后台线程中运行.当我退出REPL时,我看不到所需的关机消息.

  2. 但是,当我运行时lein run,go循环立即退出并显示"SHUTDOWN".

这也不是我想要的.

我不一定希望找到适用于所有JVM的解决方案.我在Mac上开发并部署到Ubuntu,所以我想找到适合两者的解决方案:

  • Mac JVM:java版"1.7.0_45"Java(TM)SE运行时环境(版本1.7.0_45-b18)Java HotSpot(TM)64位服务器VM(版本24.45-b08,混合模式)

  • Ubuntu JVM:java版"1.7.0_25"OpenJDK运行时环境(IcedTea 2.3.10)(7u25-2.3.10-1ubuntu0.12.04.2)OpenJDK 64位服务器VM(版本23.7-b01,混合模式)

java signals clojure core.async

10
推荐指数
2
解决办法
6018
查看次数

Clojure core.async,任何控制该(go ...)线程池中线程数的方法?

默认情况下(go ..)将使用两倍的核心数+ 42个 线程用于线程池.有什么办法可以通过设置环境变量或者sth设置线程数或代码可以使用的CPU数量吗?

在linux机器上,我可以使用taskset设置CPU的数量,例如 taskset -c 0,1 my_Java_or_Clojure_program,虽然taskset似乎对返回的数字没有效果(-> (java.lang.Runtime/getRuntime) .availableProcessors).

multithreading clojure cpu-usage core.async

6
推荐指数
2
解决办法
2859
查看次数