过去(这里和这里)有关于Hg子回购依赖关系的几个问题但是接受的答案似乎并没有解决我的问题.
我的一个项目有4个依赖项:A,B,C,D.D依赖于A,B和C; 而B和C依赖于A:

我想使用Hg子存储库来存储它们,以便我可以跟踪它们所依赖的每个版本.这是因为,当我用A,B,C和d在这个项目,其他项目将需要的只是A和B.因此,B和C必须独立于D来跟踪它们所需的A版本.同时,在我的应用程序中,给定版本的D引用的B和C版本必须始终使用与A引用的版本相同的A版本.给定版本的D(否则它将在运行时崩溃).我真正想要的是允许他们在同一目录中作为兄弟姐妹互相引用 - 即D's .hgsub看起来像下面这样,而B和C看起来就像是第一行.
..\A = https:(central kiln repo)\A
..\B = https:(central kiln repo)\B
..\C = https:(central kiln repo)\C
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用:我可以看到为什么(给人们足够的绳索让自己挂起来很容易),但我觉得它是我的依赖关系的最佳解决方案,这是一种耻辱.我已经阅读了一些建议的解决方案,我会快速概述这些解决方案以及它们为什么不能为我工作:
将副本包含为嵌套子目录,将这些副本引用为Hg子存储库.这会产生以下目录结构(我删除了A,B,C,B\A,C\A的主副本,因为我可以接受引用\ D中的副本):
这种方法的问题:
变体:使用上面但指定.hgsub的RHS指向父副本中的副本(即B和C应该具有下面的.hgsub):
A = ..\A
Run Code Online (Sandbox Code Playgroud)
这种方法的问题:
使用符号链接将文件夹\ D\B\A指向D\A等.
这种方法的问题:
这些是最好的解决方案吗?我的初始.hgsub(见上)是一个梦想有没有一个很好的理由,还是有办法我可以请求/实现这个改变?
更新以更好地解释A,B,C,D的更广泛使用
我正在为SICP工作,并希望尝试一些诡计的例子.我正在尝试流示例,并想要一个cons-stream的实现,我从这个StackOverflow问题得到了.然而当我把它打成诡计时,我得到:
guile> (define-syntax cons-stream
(syntax-rules ()
[(cons-stream x y) (cons x (delay y))]))
ERROR: invalid syntax ()
ABORT: (misc-error)
Run Code Online (Sandbox Code Playgroud)
我不知道这有什么问题 - 我尝试用'()替换(),删除[],但它仍然不起作用,即使它似乎是有效的R5RS.我目前正在使用guile 1.8.7,我看不到GNU文档提到的v2.0.1的包,这可能就是为什么它不能为我工作?
接收器类型必须是T或*T形式,其中T是类型名称.T称为接收器基类型或仅基类型.基类型不能是指针或接口类型,必须在与方法相同的包中声明.
任何人都可以给我一些有关为什么会这样的见解?是否有其他(静态类型)语言允许这样做?我真的想在接口上定义方法,所以我可以将给定接口类型的任何实例视为另一个.例如(如果以下内容有效,则从模板方法模式的维基百科文章中窃取示例):
type Game interface {
PlayOneGame(playersCount int)
}
type GameImplementation interface {
InitializeGame()
MakePlay(player int)
EndOfGame() bool
PrintWinner()
}
func (game *GameImplementation) PlayOneGame(playersCount int) {
game.InitializeGame()
for j := 0; !game.EndOfGame(); j = (j + 1) % playersCount {
game.MakePlay(j)
}
game.PrintWinner()
}
Run Code Online (Sandbox Code Playgroud)
我可以使用任何实现"GameImplementation"的实例作为"游戏"而无需任何转换:
var newGame Game
newGame = NewMonopolyGame() // implements GameImplementation
newGame.PlayOneGame(2)
Run Code Online (Sandbox Code Playgroud)
更新:这样做的目的是尝试实现抽象基类的所有好处,而不需要与显式层次结构相关的所有耦合.如果我想定义一个新的行为PlayBestOfThreeGames,抽象基类将要求我更改基类本身 - 而在这里我只是在GameImplementation接口之上定义一个更多的方法
刚刚开始我的第一个使用IndexedDb的项目,我很难在第一次使用时创建一个用于打开和升级数据库的系统.我想使用promises(当前的angularJs$q服务,但我很灵活)给我一些关于捕获任何错误的保证,并减少关于失败模式的心理开销推理.我的要求是:
到目前为止我遇到的问题:
onupgraderequired如果DB不需要升级(这样一个承诺,得到了在升级完成解决将永远不会得到解决,如果DB不需要升级回调不叫,并调用代码不知道这是否会是这样接线回调时)onsuccess回调被调用 - 因此每次升级都需要顺序链接onsuccess调用第一个回调时,该versionchange事务不再处于活动状态.我目前的结论是,API基本上对基于承诺的方法持敌对态度.我最好的尝试在下面(简化了一点以便于阅读).我哪里错了?
var newPromise = function(withDeferred) {
var deferred = $q.defer();
try {
withDeferred(deferred);
} catch (err) {
deferred.reject(err);
}
return deferred.promise;
};
var newTransactionPromise = function(getTransaction) {
return newPromise(function(deferred) {
var transaction = getTransaction();
transaction.oncomplete = function(ev) { deferred.resolve(); };
transaction.onabort = function(ev) { deferred.reject(transaction.error); };
});
};
var migrations = [
function(db) {
return newTransactionPromise(function() …Run Code Online (Sandbox Code Playgroud)