我需要使用mongo-storm库而Clojars没有它.所以我克隆了项目,手工编译并将jar复制到我的lib文件夹中.但这是一个团队项目,每个成员手动完成这些步骤是不可接受的.
如何解决这个问题是否有更好,更标准的想法?
这是语法的起点:
%%{
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跳转到适当的机器定义.或者,语义条件可用于测试计数器变量.
"更传统的方法是在输入递归结构时调用单独的解析函数(以主机语言表示),然后在识别结束时返回."
从嵌套括号的邮件列表讨论中,提到了相同的三种方法:
使用prepush和postpop指定可增长的堆栈,然后使用fcall和fret.
计算然后在操作或条件中进行验证.
输入递归结构时,调用新的解析函数(使用宿主语言).
你能指点我的一个例子 - 最好是用我上面的例子 - 在Ruby中吗?谢谢!
我想测试一个使用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)
但这很笨拙.还有更好的方法吗?也许有数据结构'验证'库可以派上用场?也许解构会让这更容易?逻辑编程?
更新/评论: …
基于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) 我想在我的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版本,其值是样式的值,通常是字符串
有什么好方法可以解决这个问题?我通常不喜欢使用内联样式,但我想知道如何使这个示例工作.
我有一个带有数值的下拉列表:
<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,但是有更短的方法吗?
根据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"包含在两个dt和dfn标签中.
我的问题是:我们为什么要记得使用dfn?这没有令人信服的解释.我正在寻找使用的确切解释dfn以及一些具体的例子.
注意:我查看了W3C的dfn标签文档,但没有回答我的问题.
有趣的是(或者没有),根据HTML5Doctor文章,该dl元素在HTML5中被重命名为"描述列表".以前它是'定义列表'.从描述清单上的W3C工作草案:
dl元素表示描述列表,其由零个或多个术语描述(名称 - 值)分组组成; 每个分组将一个或多个术语/名称(dt元素的内容)与一个或多个描述/值(dd元素的内容)相关联.
这个问题的一个更长的替代措辞是:“有哪些 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 特定的。
就像我在顶部提到的那样,我希望看到或构建验证任意数据结构的能力:散列、数组、基元等,以任何嵌套组合进行。
我正在尝试将函数应用于地图的每个值.fmap做的工作.但它移动到哪个命名空间?
我也写了下面的实现,但我认为这可能更好 -
(defn map-over
[f m]
(->>
(map (fn [[k v]]
{k (f v)})
m)
(into {})))
Run Code Online (Sandbox Code Playgroud)