小编Mic*_*ler的帖子

如何与TortoiseHG分支

我下载了TortoiseHg 1.0进行评估.对于我的生活,我无法弄清楚如何建立一个分支.它似乎理解分支(例如在其存储库浏览器中)但我似乎无法找到制作分支的方法.这似乎是一种基本功能,因为DVC经常被吹捧的好处是轻量级分支.

我用Google搜索并且找不到关于这个主题的讨论(至少对于最近的版本)所以我不得不假设我错过了什么,对吧?

更新:所以我在下面标记了Chad Birch的回答来回答"新分支"问题.正如他正确指出的那样,您执行提交,然后单击分支按钮以显示分支维护对话框,您可以在其中创建新分支.我有点希望他们为我们提供了一个上下文菜单选项.一旦你分支,下一个自然的问题是如何合并,这也不明显.事实证明,选项隐藏在存储库资源管理器中.您需要选择另一个分支的头部,右键单击,然后选择"与...合并".

mercurial tortoisehg

218
推荐指数
4
解决办法
8万
查看次数

键入安全性,Java泛型和查询

我有一个有趣的情况,我想知道是否有更好的方法来做到这一点.情况是这样的,我有一个树结构(具体是抽象语法树),一些节点可以包含各种类型的子节点,但都从给定的基类扩展.

我想经常在这个树上做查询,我想找回我感兴趣的特定子类型.所以我创建了一个谓词类,然后我可以将其传递给通用查询方法.起初我有一个看起来像这样的查询方法:

public <T extends Element> List<T> findAll(IElementPredicate pred, Class<T> c);
Run Code Online (Sandbox Code Playgroud)

其中Class参数仅用于指示返回类型.令我困扰的是这种方法是我的所有谓词都已经用于特定类型,所以这里有冗余信息.典型的呼叫可能如下所示:

List<Declaration> decls = 
    scope.findAll(new DeclarationPredicate(), Declaration.class);
Run Code Online (Sandbox Code Playgroud)

所以我像这样重构它:

public <T extends Element> List<T> findAll(IElementPredicate<T> pred);
Run Code Online (Sandbox Code Playgroud)

IElementPredicate界面看起来是这样的:

public interface IElementPredicate<T extends Element> {
    public boolean match(T e);
    public String getDescription();
    public Class<T> getGenericClass();
}
Run Code Online (Sandbox Code Playgroud)

这里的要点是谓词接口被扩展以提供Class对象.它使得编写实际的findAll方法更加有效,并且它在编写谓词时增加了一些工作,但这些都是微小的"一次性"事情,它使查询调用更好,因为你没有添加额外的(可能是多余的)参数,例如

List<Declaration> decls = scope.findAll(new DeclarationPredicate());
Run Code Online (Sandbox Code Playgroud)

我之前没有注意到这种模式.这是处理Java泛型语义的典型方法吗?只是好奇我是否错过了一些更好的模式.

Commments?

更新:

一个问题是你需要什么类?这是findAll的实现:

public <T extends Element> List<T> findAll(IElementPredicate<T> pred) {
    List<T> ret = new LinkedList<T>();
    Class<T> c = pred.getGenericClass();
    for(Element …
Run Code Online (Sandbox Code Playgroud)

java generics

10
推荐指数
1
解决办法
1296
查看次数

从Scala中的一系列表达式构造List

当我尝试在Scala中构建内部DSL时,遇到了一个常见问题,我无法制定解决方案.为了让事情看起来更像一种典型的语言,我希望语法看起来像这样:

model 'Foo {
  decl 'Real 'x;
  decl 'Real 'y;
}
Run Code Online (Sandbox Code Playgroud)

在实践中,有几个问题.第一个问题是在model这里获取一个对象以这种方式获取两个参数.如果有人有任何想法,请告诉我.但我所做的却是做一些更像这样的事情:

model('Foo) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

其中model现在是一个函数,然后使用一个apply方法返回一个对象,然后使用随后的lambda.我可以忍受.我也可以在lambda中遇到类似的问题,所以像内部decl 'Real 'x或类似的东西decl('Real,'x).但我想要做的是将所有这些表达式的结果放在波浪形的大括号中以作为列表"返回".换句话说,我想要写的是这样的东西:

model 'Foo {
  decl('Real,'x);
  decl('Real,'y);
}
Run Code Online (Sandbox Code Playgroud)

其中,decl(...)求值为某种类型Declaration,{...}然后求值为List[Declaration].我怀疑有一些方法可以使用implicits来做到这一点,但我一直无法找到它.简而言之,我想:

model 'Foo {
  decl('Real,'x);
  decl('Real,'y);
}
Run Code Online (Sandbox Code Playgroud)

...评估相当于......

model 'Foo {
  decl('Real,'x) ::
  decl('Real,'y) ::
  Nil
}
Run Code Online (Sandbox Code Playgroud)

意见或建议?

dsl scala

9
推荐指数
1
解决办法
531
查看次数

无法让nrepl在Emacs工作

我在Ubuntu机器上运行.我已经emacs23安装了,但它看起来像是nREPL可以使用的emacs24.所以,我卸载emacs23,安装emacs24.我删除了现有的.emacs文件和.emacs.d目录.

然后我跑M-x package-list-packages,并安装clojure-modenrepl.

我创建了一个Clojure项目,lein new foobar然后尝试打开默认core.clj文件.它让我自动进入Clojure模式,但如果我输入M-x nrepl-jack-in(在core.clj缓冲区中),它说Starting nREPL server...,但我从未看到任何命名的缓冲区*nrepl*(基于阅读文档,这是预期的结果).我只是Starting nREPL server...无限期地看到了迷你缓冲区.

现在,一个名为缓冲*nrepl-server* 创建,它说:

REPL started; server listening on localhost port 5871
Exception Unsupported option(s) supplied: :headless  clojure.core/load-libs (core.clj:5266)
clojure.core=>
Run Code Online (Sandbox Code Playgroud)

但它似乎并不是非常有用(我似乎无法让它在那个缓冲区中评估任何东西?!?).

我试着谷歌搜索,但我找不到任何似乎有这个问题的人.我想玩Clojure(core.logic特别是),但这是一个完全不起作用的.:-(

emacs ubuntu clojure nrepl

9
推荐指数
1
解决办法
868
查看次数

TypeScript 中的超类型约束

我正在尝试使用updeep图书馆。一个典型的使用例子updeep是这样的:

var person = {
  name: {
    first: 'Jane',
    last: 'West'
  }
};

var result = u({ name: { first: 'Susan' } }, person);
Run Code Online (Sandbox Code Playgroud)

这里的想法是,这result将是 的克隆,person但值已name.first更改。你可以想象这个函数,u在 TypeScript 中定义为:

function u<T>(changes: {}, obj: T): T { ... }
Run Code Online (Sandbox Code Playgroud)

这捕获了第二个参数的类型也是函数的返回类型的事实。但是,它不表达的是,changes应该是一个超类型T

我想要的是对第一个参数进行一些类型检查。关键是参数中存在的值changes都应该出现在T类型参数中,并与它们对应的类型匹配。表达这个允许我们检查changes参数以确保它对类型有意义T即,是 的超类型T)。

我不确定这在 TypeScript 中是否可行。在 Java 等语言中,您有super关键字,它可用于描述对类型参数的约束。

虽然 TypeScript 不允许,但这样的事情表达了我想要的: …

typescript

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

PureScript和类型类

我在使用PureScript类型类时遇到了麻烦.我必须在前面说,我不是Haskell专家,所以如果这些是明显的错误我会道歉.

我已经尝试了几种不同的方法,并为每个方法打了一堵墙.我基本上试图为show图中的边定义函数.一种方法如下:

module Foo where

data Edge n = Edge { from :: n, to :: n }

instance showEdge :: (Show n) => Show (Edge n) where
  show e = "Edge from "++(show e.from)++" to "++(show e.to)

e = Edge { from: 1, to: 2 }

main = show e
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

$ psc src/Attempt1.purs
Error at src/Attempt1.purs line 6, column 27:
Error in declaration showEdge
Cannot unify Prim.Object with Foo.Edge.
Run Code Online (Sandbox Code Playgroud)

我猜这与它推断e出定义中的类型这一事实有关show.我在这里尝试添加类型注释,但是我收到了语法错误:

module Foo …
Run Code Online (Sandbox Code Playgroud)

purescript

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

在 TypeScript 中多态 this

我正在尝试做我认为是多态的“教科书”用例this,但它不起作用,我只是想不通。想象一下,我有一些abstract可克隆的基类,例如:

abstract class X {
    abstract clone(): this;
}
Run Code Online (Sandbox Code Playgroud)

现在我想实现一个提供实现的基类clone

class Y extends X {
    constructor(private x: number) { super() }
    clone(): this { return new Y(this.x + 1); }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到一个错误消息Type Y is not assignable to type 'this'。我完全糊涂了。我想在这里传达的是类型约束,如果 的子类调用了X它的clone方法,那么您将返回的事物的类型将与子类型相同。这不正是多态this的用途吗?我在这里做错了什么?

这是TypeScript 游乐场中此代码的链接

typescript

5
推荐指数
2
解决办法
779
查看次数

如何在Scala解析器组合器中组合Regexp和关键字

我已经看到了两种在Scala中构建解析器的方法.

第一个是从RegexParsers扩展并定义您赢得的词汇模式.我看到的问题是,我真的不明白它是如何处理关键词含糊不清的.例如,如果我的关键字与idents匹配相同的模式,那么它会将关键字作为标识进行处理.

为了应对这一点,我已经看到了类似的帖子这样一个说明如何使用StandardTokenParsers指定关键字.但是,我不明白如何指定正则表达式模式!是的,StandardTokenParsers带有"ident"但它没有我需要的其他(复杂的浮点数表示,特定的字符串文字模式和转义规则等).

如何同时获得指定关键字的能力以及使用正则表达式指定令牌模式的能力?

parsing scala keyword lexical-analysis lexical

3
推荐指数
1
解决办法
1452
查看次数

结合摩卡,打字稿(和手表)

我创建了一个项目,我想用mocha来测试我的Typescript代码.如果我这样做:

mocha ts/test --compilers ts:typescript-require
Run Code Online (Sandbox Code Playgroud)

在我进行更改后,它将失败并显示如下消息:

error TS2307: Cannot find module 'mocha'.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为如果我只是运行tsc一切都很好(我有我所有的类型定义,我正在使用一个tsconfig.json文件).我也安装typescript-requiremocha.

但是每次我在那之后运行命令,它都有效吗?!?但如果我mocha进入观察模式:

mocha -w ts/test --compilers ts:typescript-require
Run Code Online (Sandbox Code Playgroud)

然后它第一次通过但在此之后失败.啊! 有关如何获得涉及mocha和Typescript 的强大设置的任何建议,以便我可以测试和观看?

mocha.js typescript

3
推荐指数
3
解决办法
4804
查看次数

扩展内置集合,内置方法的问题

我是Scala新手,请原谅我,如果这是一个愚蠢的问题,但是这里......

想象一下,我希望创建一个包含其他方法的扩展Map类型.我可以看到几种方法来做到这一点.第一个是组成:

class Path[V](val m: Map[V, Int]) {
  // Define my methods
}
Run Code Online (Sandbox Code Playgroud)

另一种是通过继承,例如

class Path[V] extends Map[V, Int] {
// Define my methods
}
Run Code Online (Sandbox Code Playgroud)

最后,我还考虑了"特质"路线,例如

trait Path[V] extends Map[V, Int] {
// Define my methods
}
Run Code Online (Sandbox Code Playgroud)

构图有点尴尬因为你经常不得不引用里面的东西.遗传是相当自然的,但我有一个皱纹(更多的是一秒).Traits看起来像是一种非常优雅的方式,并且使用"with"构造它非常好但它对我来说也有问题.

我遇到的皱纹是用像++这样的方法.他们返回一张新地图.所以让我们说上面提到的"我的方法"希望在地图上添加一些东西(只是一个例子,我知道地图已经有了这个),例如

trait Path[V] extends Map[V,Int] {
    def addOne(v: V, i: Int): Path[V] = this + (v -> i)
}
Run Code Online (Sandbox Code Playgroud)

这会生成错误,因为返回类型不是Path [V].现在我知道我可以在新实例上使用"with"来添加Path [V]特征.但我不控制这里新地图的构造.有没有办法添加Path [V]特征?我考虑创建一个预先填充的新不可变映射,然后在"with Path [V]"上进行标记,但是没有这样的构造函数可以用来创建预先填充的映射.

我怀疑(虽然我还没有确认)我会有类似的问题使用继承.我可以添加一个新方法来向地图添加一个新条目,但我不会得到一个"Path [V]"这就是我想要的.组合方法似乎是走到这里的唯一方法.

我希望这很清楚.评论?

scala traits

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

用于案例类的Scala构造函数问题

我对Scala中的某些东西感到困惑.我似乎有对象具有相同的地址,但内容不同.我在使用Kiama时遇到过这个问题.但为了简单起见,我把所有代码都煮到了这个:

object CaseTests {
  trait Attributable extends Product {
    var parent: Attributable = null;

    private def setChildConnections = {
        var i : Int = 0        
        for (i <- 0 until productArity) {
            productElement (i) match {
                case c : Attributable => c.parent = this
                case _ => 
            }
        }

    }
    setChildConnections
  }

  abstract class Tree extends Attributable { def id = super.toString }
    case class Pair (left : Tree, right : Tree) extends Tree { println(this+" = "+super.toString + " …
Run Code Online (Sandbox Code Playgroud)

java scala hashcode

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

从Read到Write管道的最简单方法是什么

我有两个对象.一个实现std::io::Read特征,另一个实现std::io::Write特征(例如,两个std::fs::File实例).我试图找出一种简单有效的方法将数据从Read实例传输到Write实例中.

让我补充一点,我完全了解std::fs::copy,但这仅适用于文件系统上的文件...这些不是那样的.我也看了一下std::io::copy,但它不适用于ReadWrite实例.

我知道我可以阅读的内容Read变成Vec<u8>像这样的东西:

let mut data = Vec::new();
file.read_to_end(&mut data);
Run Code Online (Sandbox Code Playgroud)

但是,read_to_end填补了Vec<u8>,但是,相应的功能Write,write_all,需要一个&[u8]和我没有看到任何方法上Vec<u8>,让我来创建一个新的阵列,只有一些预先指定大小的片.

我可以想象几种不同的方法(一次读/写一个字节,读/写块).但是我希望有一些功能std可以完成所有这些功能(包括所有必需的错误处理,块大小管理等),但如果它存在,我就无法找到它.

有关简单方法的任何建议吗?我确实相对来说是Rust的新手,但是当我说我花了很多时间寻找这样的东西并且找不到它时,请相信我.是的,我意识到在那个时候我可以实现,但我想要一些有效的东西,我担心我写的东西不会是最优的.

谢谢你的帮助.

rust

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