小编Dav*_* J.的帖子

如何共享不在Clojars中的依赖项

我需要使用mongo-storm库而Clojars没有.所以我克隆了项目,手工编译并将jar复制到我的lib文件夹中.但这是一个团队项目,每个成员手动完成这些步骤是不可接受的.

如何解决这个问题是否有更好,更标准的想法?

clojure dependency-management leiningen

7
推荐指数
1
解决办法
1096
查看次数

简单的Ragel示例平衡括号?

这是语法的起点:

%%{
  machine xo;

  char = "x" | "o";
  group = "(" char* ")";
  main := group;
}%%
Run Code Online (Sandbox Code Playgroud)

(xxxx(oo)()xx)例如,它处理.如何扩展它以允许嵌套组; 例如(xxxx(o(x)o)()xx

我知道递归通常不是由一台Ragel机器支持的.所以这不起作用:

group = "(" ( char | group )* ")";
Run Code Online (Sandbox Code Playgroud)

来自Ragel状态机编译器用户指南(PDF) :(为了强调而添加了粗体文本):

"一般来说,Ragel无法处理递归结构,因为语法被解释为常规语言.但是,根据需要解析的内容,使用手动编码技术实现递归部分有时是实用的.这通常适用于递归结构的情况简单易懂,比如平衡括号."

"解析递归结构的一种方法是使用递增和递减计数器的操作,或以其他方式识别递归结构的入口和退出结构,然后使用fcall和fret跳转到适当的机器定义.或者,语义条件可用于测试计数器变量.

"更传统的方法是在输入递归结构时调用单独的解析函数(以主机语言表示),然后在识别结束时返回."

嵌套括号的邮件列表讨论中,提到了相同的三种方法:

  1. 使用prepush和postpop指定可增长的堆栈,然后使用fcall和fret.

  2. 计算然后在操作或条件中进行验证.

  3. 输入递归结构时,调用新的解析函数(使用宿主语言).

你能指点我的一个例子 - 最好是用我上面的例子 - 在Ruby中吗?谢谢!

ruby ragel

7
推荐指数
1
解决办法
2105
查看次数

如何测试使用gensyms的clojure宏?

我想测试一个使用gensyms的宏.例如,如果我想测试这个:

(defmacro m1
  [x f]
  `(let [x# ~x]
    (~f x#)))
Run Code Online (Sandbox Code Playgroud)

我可以用宏扩展......

(macroexpand-1 '(m1 2 inc))
Run Code Online (Sandbox Code Playgroud)

...要得到...

(clojure.core/let [x__3289__auto__ 2] (inc x__3289__auto__))
Run Code Online (Sandbox Code Playgroud)

这对于一个人来说很容易验证是正确的.

但是,我如何以实用,干净的自动化方式对其进行测试?gensym不稳定.

(是的,我知道特定的宏观例子并不引人注目,但问题仍然是公平的.)

我意识到Clojure表达式可以被视为数据(它是一种同性语言),所以我可以像这样分开结果:

(let [result (macroexpand-1 '(m1 2 inc))]
  (nth result 0) ; clojure.core/let
  (nth result 1) ; [x__3289__auto__ 2]
  ((nth result 1) 0) ; x__3289__auto__
  ((nth result 1) 0) ; 2
  (nth result 2) ; (inc x__3289__auto__)
  (nth (nth result 2) 0) ; inc
  (nth (nth result 2) 1) ; x__3289__auto__
  )
Run Code Online (Sandbox Code Playgroud)

但这很笨拙.还有更好的方法吗?也许有数据结构'验证'库可以派上用场?也许解构会让这更容易?逻辑编程?

更新/评论: …

testing macros clojure gensym

7
推荐指数
2
解决办法
803
查看次数

Clojure core.async,CPU在超时后挂起.无论如何要正确杀死(go ..)块产生的宏线程?

基于core.async遍历示例,我在下面创建了类似的代码,以使用多个通道处理一些CPU密集型作业,超时为10秒.但是在主线程返回后,CPU使用率仍然保持在700%左右(8台CPU机器).我必须在emacs中手动运行nrepl-close来关闭Java进程.

是否有任何正确的方法来杀死(go ..)块产生的宏线程?我试过了!每个陈,但它不起作用.我希望在主线程返回后确保Java进程将CPU使用率恢复为0.

(defn [] RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB (do...   (str ...)))


(let [n 1000
      cs (repeatedly n chan)]
  (doseq [c cs] 
    (go 
     (>! c  (RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB ))))

  (dotimes [i n]
    (let [[result source] (alts!!  (conj cs (timeout 10000))) ]  ;;wait for 10 seconds for each job
      (if  (list-contains? cs source)  ;;if returned chan belongs to cs 
        (prn "OK JOB FINISHED " result)
        (prn "JOB TIMEOUT")
        )))

 (doseq [i cs]
   (close! i))  ;;not useful for "killing" macro thread

 (prn "JOBS ARE DONE")) …
Run Code Online (Sandbox Code Playgroud)

multithreading asynchronous clojure core.async

7
推荐指数
1
解决办法
1881
查看次数

使用带有ClojureScript,Om和React.js的内联样式字符串

我想在我的ClojureScript应用程序中使用这个Om片段:

    (dom/img
     #js {:className "img-circle"
          :src "data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
          :style "width: 140px; height 140px;"
          :alt "Generic Placeholder Image"})
Run Code Online (Sandbox Code Playgroud)

这会"爆炸"并停止整个页面的整个渲染!

我认为原因与React.js如何处理样式有关.根据内联样式:

在React中,内联样式未指定为字符串.相反,它们使用一个对象来指定,该对象的键是样式名称的camelCased版本,其值是样式的值,通常是字符串

有什么好方法可以解决这个问题?我通常不喜欢使用内联样式,但我想知道如何使这个示例工作.

inline-styles clojurescript reactjs om

7
推荐指数
1
解决办法
1282
查看次数

使用jQuery在下拉列表中查找最大值?

我有一个带有数值的下拉列表:

<select name="a">
   <option value="1">asdsadas</option>
   <option value="1">wqecsdc</option>
   <option value="10">nmnmbn</option>
   <option value="16">assadsa</option>
   <option value="12">uuyuyuy</option>
   <option value="60">xzXz</option>
   <option value="55">vbbnbnm</option>
   <option value="13">eerrt</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我需要在此列表中找到最高数值.(在这种情况下,它是60.)

我在想循环使用.each,但是有更短的方法吗?

jquery

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

什么时候一起使用dfn和dt?

根据HTML5Doctor关于dl元素的文章:" <dl>可以用来标记术语表,尽管你必须记住<dfn>用来表明这个词是在同一个文档中定义的." 注意:括号内的语言是我自己的.文章给出了这个标记来解释:

<dl>
  <dt><dfn>RSS</dfn></dt>
  <dd>An XML format for aggregating information from websites whose
    content is frequently updated.</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

请注意,术语"RSS"包含在两个dtdfn标签中.

我的问题是:我们为什么要记得使用dfn?这没有令人信服的解释.我正在寻找使用的确切解释dfn以及一些具体的例子.

注意:我查看了W3C的dfn标签文档,但没有回答我的问题.

其他背景和参考文献

有趣的是(或者没有),根据HTML5Doctor文章,dl元素在HTML5中被重命名为"描述列表".以前它是'定义列表'.从描述清单上W3C工作草案:

dl元素表示描述列表,其由零个或多个术语描述(名称 - 值)分组组成; 每个分组将一个或多个术语/名称(dt元素的内容)与一个或多个描述/值(dd元素的内容)相关联.

html html5

6
推荐指数
1
解决办法
2141
查看次数

验证 Ruby 哈希的形状?

这个问题的一个更长的替代措辞是:“有哪些 Ruby 库或方法可以测试任意数据结构(散列、数组、整数、浮点数、字符串等)的形状?”

首先,让我展示一个简单的例子:

hash_1 = {
  k1: 1.0,
  k2: 42,
  k3: {
    k4: "100.00",
    k5: "dollars"
  }
}
Run Code Online (Sandbox Code Playgroud)

接下来,我想验证它——我的意思是与形状/模式/模板进行比较,例如:

shape_a = {
  k1: Float,
  k2: Integer,
  k3: Hash
}
Run Code Online (Sandbox Code Playgroud)

或者,也许,更具体的形状:

shape_b = {
  k1: Float,
  k2: Integer,
  k3: {
    k4: String,
    k5: String
  }
}
Run Code Online (Sandbox Code Playgroud)

一种可能的 API 可能如下所示:

require '_____________'

hash_1.schema = shape_a
hash_1.valid? # => true

hash_1.schema = shape_b
hash_1.valid? # => true
Run Code Online (Sandbox Code Playgroud)

这些只是示例,我对其他方法持开放态度。

大约 3 年前,我写了schema_hash来解决我自己的问题。我计划更新它,但首先我想了解替代方案和更好的方法。

这个问题的动机来自一个 Mongo 用例,但这个问题不一定是 Mongo 特定的。

就像我在顶部提到的那样,我希望看到或构建验证任意数据结构的能力:散列、数组、基元等,以任何嵌套组合进行。

“你不需要 Mongo 的模式,所以你为什么要关心?” …

ruby mongodb

6
推荐指数
1
解决办法
3512
查看次数

其中是fmap(或者如何将fn应用于地图的每个值)

我正在尝试将函数应用于地图的每个值.fmap做的工作.但它移动到哪个命名空间?

我也写了下面的实现,但我认为这可能更好 -

(defn map-over
  [f m]
  (->>
   (map (fn [[k v]]
         {k (f v)})
        m)
   (into {})))
Run Code Online (Sandbox Code Playgroud)

clojure

6
推荐指数
1
解决办法
2621
查看次数

IntelliJ IDEA 代码高亮插件使用 ANTLR 语法吗?

我使用 ANTLRv4 语法来解析我的DSL。我想为我的 DSL 创建一个插件来支持 IntelliJ IDEA 中的代码突出显示和代码完成。

据我所知,IntelliJ 使用BNFFlex格式进行解析。

是否有可能:

  1. 使用 ANTLR 语法,或者
  2. 将 ANTLR 语法转换为 BNF 和 Flex ...

...为我的 DSL 制作一个 IntelliJ 插件?

grammar antlr jetbrains-ide intellij-idea intellij-plugin

5
推荐指数
1
解决办法
1693
查看次数