我喜欢化石的是它使用普通的旧sqlite来存储变更集,文件等.我可以使用它的命令行工具来查询存储库,但是如果我想要它不支持的东西,我可以回退到编写一个sql查询.
Mercurial和git更成熟,它们有更多的库,更有动力,但它们使用自己的存储库格式.我想知道是否有可能将sqlite作为他们的存储库后端.(我知道有直接查询mercurial或git repo的工具,但sql似乎更容易.)
我正在尝试使用hg pushgit存储库,但它默默地失败了.我在邮件列表上发现了一个帖子和一个注册的hg-git问题,但两者都是大约半年没有太多活动.所以我开始认为我误解/错误配置了一些东西.我的~/.hgrc包含
[extensions]
hgext.bookmarks =
hgext.git =
#hggit = /path/to/hg-git-0.3.1/hggit
[bookmarks]
track.current = True
Run Code Online (Sandbox Code Playgroud)
此代码段重现了此问题:
mkdir /tmp/Git
cd /tmp/Git
git init
echo 'something' > myfile
git add .
git commit -m 'Started'
cd ..
hg clone /tmp/Git /tmp/Hg
cd /tmp/Hg
echo 'another thing' >> myfile
hg ci -m 'Working'
hg log
# Two items listed
hg push
cd ../Git
git log
# Only one item listed, but two expected
Run Code Online (Sandbox Code Playgroud)
我尝试了 …
我想更清楚地了解关于他们的论证类型的闭包.所以我会写类似的东西
List<Y> myCollect(List<X> list, Closure<X,Y> clos) { ... }
Run Code Online (Sandbox Code Playgroud)
我知道Groovy不会使用该类型信息,但Groovy ++可能会在编译时使用它.这可以实现(除了将其纳入评论)?
更新:标题可能听起来有误导性,但我认为上面的例子会让它更清晰.我有兴趣指定一个闭包的类型,它是某个函数的参数.假设,我想重新启动内置功能collect.所以我对写作感兴趣myCollect,而不是写作clos.我想要实现的是获取编译时错误
myCollect(['a', 'ab'], { it / 2 }) // compile error
myCollect(['a', 'ab'], { it.size() }) // OK
Run Code Online (Sandbox Code Playgroud) 如何检查值是否为NaN?我更喜欢一种可以在Clojure中使用的解决方案,而且没有太多额外的东西(因此我不想使用外部库,例如下划线).这是我试过的
(number? js/NaN) ;=> true, well I'd expect false
(= js/NaN (js/parseInt "xx")) ;=> false
(= js/NaN js/NaN) ;=> false, even worse
; This is the best I could come up with
(defn actual-number?
[n]
(or (> 0 n) (<= 0 n)))
Run Code Online (Sandbox Code Playgroud) 我想将一个非常简单的Antlr语法转换为Xtext,因此没有语法谓词,没有Xtext提供的Antlr的花哨功能.考虑这个语法
grammar simple; // Antlr3
foo: number+;
number: NUMBER;
NUMBER: '0'..'9'+;
Run Code Online (Sandbox Code Playgroud)
和它的Xtext对应物
grammar Simple; // Xtext
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate Simple "http://www.example.org/Simple"
Foo: dummy=Number+;
Number: NUMBER_TOKEN;
terminal NUMBER_TOKEN: '0'..'9'+;
Run Code Online (Sandbox Code Playgroud)
Xtext在幕后使用Antlr,但这两种格式并不完全相同.我必须修改一些烦人的(并且部分可理解的)事情,包括:
terminal关键字前缀终端import "http://www.eclipse.org/emf/2002/Ecore" as ecore使终端工作foo: dummy=number+是否有工具可以自动进行此转换,至少对于简单的情况?如果没有,是否有更完整的此类必要修改清单?
我想在ClojureScript上做一些基本的,但不是非常基本的与日期相关的操作,比如在两个日期之间获取日期.有一个clj-time是Joda时间的包装,所以它只是Clojure.我也知道Google Closure Library中的日期类.JavaScript有许多可能性,请参阅/sf/ask/56200301/或/sf/ask/69789681/.我想知道是否有一种惯用的ClojureScript方法.如果没有这样的野兽,我想知道哪个JavaScript库最适合包装.
Fold(又名reduce)被认为是一个非常重要的高阶函数.Map可以表示fold(见这里).但这对我来说听起来比实际更具有学术性.典型的用途可能是获得总和,产品或数字的最大值,但这些函数通常接受任意数量的参数.那么为什么写的(fold + 0 '(2 3 5))时候(+ 2 3 5)工作正常.我的问题是,在什么情况下使用最简单或最自然fold?
我正在为CoffeeScript编写一个Eclipse/Xtext插件,我意识到我可能需要手工编写一个lexer.CoffeeScript解析器还使用手写的词法分析器来处理语法中的缩进和其他技巧.
Xtext生成一个扩展的类,org.eclipse.xtext.parser.antlr.Lexer然后扩展org.antlr.runtime.Lexer.所以我想我会扩展它.我可以看到两种方法
mTokens().这是由生成的代码完成的,改变了内部状态.nextToken()这似乎是一种自然的方法,但随后我将不得不跟踪内部状态.我找不到任何例子如何在没有语法文件的情况下为ANTLR写一个简单的词法分析器.所以最简单的答案就是指向一个指针.
对Xtext的回答:具有重要/语义空白的语言的语法指的是通过改变底层输入流中的标记来处理缩进问题的todotext.我不想这样做,因为很难处理coffeescript语法的其他技巧.
更新:
在此期间我意识到我的问题部分是特定于Xtext的.
我想想象一个语法文件(实际上是咖啡脚本的Jison语法).因此输入文件是Bison/Yacc样式的语法文件.预期的输出可以是Graphviz点文件或类似的东西.
我不一定在寻找像GOLD这样的完整IDE .但是能够处理LALR输入很重要,这就是优秀的ANLTRWorks没有考虑到的原因.
我还检查了维基百科上解析器的比较,但它只包括IDE支持,但不包括可视化.
这是我实际想要可视化的coffeescript语法文件.
我正在寻找一个具有持久数据结构的函数库.我只需要嵌套数组和字典.有一些功能性的JavaScript库,但它们不适合不变性.我希望能够写作
var dict = makeDictionary({
'foo': 1;
'bar': {
'ely': 2;
}
});
var newDict = dict.assoc('foo', 42).assoc('bar', 'tender', 30).dissoc('bar', 'ely');
assert.eq dict.bar.ely, 2; // unchanged
assert.eq newDict.bar.tender, 30; // added
assert.eq newDict.bar.ely, undefined; // removed
Run Code Online (Sandbox Code Playgroud)
虽然下划线在某些情况下很接近,特别是对于数组,它会修改字典参数.我也可以使用clojurescript,但我更喜欢更轻量级的方法.
javascript functional-programming persistent-data data-structures