小编Dan*_*tin的帖子

什么是第一 - 最后还是阻止?

考虑以下测试用例:

public class Main {

    static int a = 0;

    public static void main(String[] args) {
        try {
            test();
            System.out.println("---");
            test2();
        }
        catch(Exception e) {
            System.out.println(a + ": outer catch");
            a++;
        }
    }

    public static void test()
    {
        try {
            throw new Exception();
        }
        catch (Exception e) {
            System.out.println(a + ": inner catch");
            a++;
        }
        finally {
            System.out.println(a + ": finally");
            a++;
        }
    }

    public static void test2() throws Exception
    {
        try {
            throw new Exception();
        }
        finally {
            System.out.println(a …
Run Code Online (Sandbox Code Playgroud)

java

23
推荐指数
3
解决办法
2万
查看次数

在scala中的自键型特征中调用超类的方法

我正在尝试创建一个特性,当混入时,将用一个调用原始方法的方法替换方法的默认定义,然后操纵结果.

这是我正在尝试做的事情:

class Foo {
  def bar() : String = "Foos bar"
}

trait OtherStuff {
  self : Foo =>
  def bar() : String = self.bar() + " with OtherStuff"
}

class Quux extends Foo with OtherStuff
Run Code Online (Sandbox Code Playgroud)

如果按照我想要的方式工作,那么(new Quux).bar现在就会回归Foos bar with OtherStuff.不幸的是,它不起作用 - 我得到的是:

<console>:6: error: error overriding method bar in class Foo of type ()String;
 method bar in trait OtherStuff of type ()String needs `override' modifier
       class Quux extends Foo with OtherStuff
Run Code Online (Sandbox Code Playgroud)

但如果我override在定义时使用 …

scala scala-2.7

22
推荐指数
1
解决办法
6869
查看次数

Java中try catch块中变量"范围"的问题

任何人都可以解释为什么在最后几行中,br不被认为是变量?我甚至试过将br放入try clause,设置为final等等.这与Java有什么关系不支持闭包吗?我99%有信心类似的代码可以在C#中工作.

private void loadCommands(String fileName) {
    try {
        final BufferedReader br = new BufferedReader(new FileReader(fileName));

        while (br.ready()) {
            actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) br.close(); //<-- This gives error. It doesn't
                                    // know the br variable.
    }       
}
Run Code Online (Sandbox Code Playgroud)

谢谢

java try-catch

21
推荐指数
2
解决办法
3万
查看次数

是否有某些地方为非Scala程序员提供SBT指南?

总有一天,我想学习Scala.我从喜欢它的人那里看到的语言非常令人鼓舞.

但是,今天不是那一天.今天,我只想对我的团队的构建文件进行一些更改.不幸的是,这个构建文件与SBT放在一起,几乎是不可理解的.

我的主要问题是,在我看来,SBT引入了一些庞大的新运算符集合,这些运算符使用字符串和列表来创建某种sbt对象.例如,在sbt中:

"args4j" % "args4j" % "2.0.12"
Run Code Online (Sandbox Code Playgroud)

显然是实际定义的; 但是,我甚至无法分辨它在scalarepl中的类型,因为在repl我得到了明智的错误:

scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
       val tstcrap = "args4j" % "args4j" % "2.0.12"
Run Code Online (Sandbox Code Playgroud)

即使在设置类路径以包含sbt-launch.jar文件并执行操作后,我也会收到此错误import sbt._.

同样,我正在处理这样的事情:

 val jarSources = (descendents(classesOutput ##, "*") ---
                  assemblyExclude(classesOutput ##))
Run Code Online (Sandbox Code Playgroud)

什么是##运算符,这是---做什么的,更重要的是这个表达式的类型是什么?所有这些新操作符都记录在某处,是否有某种方法可以使用与sbt构建文件中使用的语言相同的scala repl?

查看此sbt文件会让我想起在perl没有阅读任何相关手册页的情况下尝试破译.(不是推荐的活动)

更新:在查看下面答案中的链接,并查看标记的其他问题和答案后sbt,我发现了我缺少的主要scala知识:scala允许定义在方法之前调用的隐式转换得到了解决.在这种情况下,sbtManagedProjecttrait 内部定义,隐式转换String为私有类sbt.GroupID,以便

"a" …
Run Code Online (Sandbox Code Playgroud)

scala operators sbt

21
推荐指数
1
解决办法
1585
查看次数

scalacheck任意隐含和递归生成器

我看到scalacheck似乎是一个非常明显的错误,如果真的存在,我无法看到人们如何将它用于递归数据结构.

StackOverflowError在构造Arbitrary值时,此程序在scalacheck接管之前失败.请注意,s 的Tree类型和生成器Tree是从这个scalacheck教程中逐字记录的.

package treegen

import org.scalacheck._
import Prop._

class TreeProperties extends Properties("Tree") {

  trait Tree
  case class Node(left: Tree, right: Tree) extends Tree
  case class Leaf(x: Int) extends Tree

  val ints = Gen.choose(-100, 100)

  def leafs: Gen[Leaf] = for {
    x <- ints
  } yield Leaf(x)

  def nodes: Gen[Node] = for {
    left <- trees
    right <- trees
  } yield Node(left, right)

  def trees: Gen[Tree] = Gen.oneOf(leafs, nodes)

  implicit lazy …
Run Code Online (Sandbox Code Playgroud)

scala recursive-datastructures scalacheck

13
推荐指数
2
解决办法
4070
查看次数

相当于python的-R选项会影响整数的哈希值

我们有一大堆python代码,它们需要一些输入并产生一些输出.

我们希望保证,在相同输入的情况下,无论python版本还是本地环境,我们都会生成相同的输出.(例如代码是在Windows,Mac还是Linux上运行,32位或64位)

我们已经在自动化测试套件中执行了这个操作,通过运行我们的程序,无论是否有-Rpython选项和比较输出,假设这会消除我们的输出意外结束的任何位置依赖于迭代超过a dict.(我们的代码中最常见的非确定性来源)

但是,由于我们最近调整了代码以支持python 3,我们发现了一个地方,我们的输出部分依赖于dict使用ints作为键的迭代.与python2相比,这个迭代顺序在python3中发生了变化,并使我们的输出变得不同.我们现有的测试(全部在python 2.7上)没有注意到这一点.(因为-R不影响ints 的哈希)一旦找到,它很容易修复,但我们希望早点找到它.

是否有任何方法可以进一步对我们的代码进行压力测试,并让我们相信我们已经根据python版本/环境可能会有所不同的内容隐瞒了我们最终隐藏的所有地方?我认为,类似-R或者PYTHONHASHSEED是应用于数字以及为str,bytes,和datetime对象可以工作,但我开到其他的方法.但是,如果可能的话,我希望我们的自动测试机只需要安装一个python版本.

另一个可接受的替代方案是使用pypy调整运行我们的代码的某种方式,以便在迭代项目时使用不同的顺序dict; 我认为我们的代码是在pypy上运行的,尽管它不是我们曾经明确支持过的东西.但是,如果一些pypy专家为我们提供了一种在不同的运行中调整字典迭代顺序的方法,那么我们将努力实现这一目标.

python pypy python-2.7 python-3.x

13
推荐指数
1
解决办法
426
查看次数

在Haskell中,如何在Web客户端断开连接时中止计算

我有一个基于Haskell的Web服务,它执行一些计算,对于某些输入可能需要很长时间才能完成.("真的很长"这里意味着超过一分钟)

因为执行该计算会占用服务器上所有可用的CPU,所以我将传入的请求放在一个队列中(好吧,实际上是一个堆栈,原因与典型的客户端有关,但除了这一点之外)当它们到达并为它们提供服务时当前正在运行的计算结束.

我的问题是,客户端并不总是等待足够长的时间,有时会超时,断开连接并尝试使用不同的服务器(好吧,他们再次尝试并点击elb,通常会获得不同的实例).此外,由于外部因素,Web客户端偶尔要求的计算将会过时,Web客户端将被终止.

在那些情况下,我真的希望能够在我将下一个请求从堆栈中拉出并开始(昂贵的)计算之前检测到Web客户端已经消失.不幸的是,我使用snap的经验让我相信在该框架中无法询问"客户端的TCP连接是否仍然连接?" 我还没有找到任何涵盖"客户端断开连接"案例的其他Web框架的文档.

那么是否有一个Haskell Web框架,可以很容易地检测Web客户端是否已断开连接?或者失败了,是否有一个至少使它成为可能?

(我知道在所有情况下都可能无法绝对确定TCP客户端是否仍在那里而不向另一端发送数据;但是,当客户端实际向服务器发送RST数据包而服务器的框架没有让应用程序代码确定连接已经消失,这是一个问题)


顺便说一下,虽然有人可能怀疑warp的 onClose处理程序会让你这样做,但只有当响应准备好并写入客户端时才会触发,因此作为中止正在进行的计算的方法是无用的.似乎也无法访问已接受的套接字以便设置SO_KEEPALIVE或类似.(有一些方法可以访问初始侦听套接字,但不是接受的套接字)

haskell tcp haskell-snap-framework

11
推荐指数
1
解决办法
295
查看次数

如何在输入中检查反斜杠?

我必须从文件中读取的字符串中检查字符序列,例如\ chapter {Introduction}.要做到这一点,我必须首先检查反斜杠的出现.

这就是我做的

 final char[] chars = strLine.toCharArray();
         char c;
         for(int i = 0; i<chars.length; i++ ){
            c = chars[i];
            if(c ==  '\' ) {

            }
         }
Run Code Online (Sandbox Code Playgroud)

但反斜杠被视为转义序列而不是字符.

任何有关如何做到这一点的帮助将不胜感激.

java comparison

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

获取堆栈以通过测试套件名称作为--test-arguments的一部分

借助cabal,可以建立连续的构建,以许多CI系统会接受的格式记录测试成功/失败的命令,例如:

cabal test '--test-option=--jxml=test-results/$test-suite.xml'
Run Code Online (Sandbox Code Playgroud)

这里的重要部分$test-suite是用测试名称代替,以便不同的测试将其结果放入不同的文件中。

当我使用堆栈时,所有测试实际上都会获得--jxml=test-results/$test-suite.xml传递给他们的选项,因此最终结果是测试覆盖了彼此的结果。

有什么方法可以运行我的所有测试,stack以便告诉每个测试套件一个不同的位置来编写其结果?

我什至会接受一些堆栈命令,为我解析cabal文件并告诉我有什么测试套件,因为这样我就可以在bash中编写一个脚本循环,一次调用每个测试套件。

haskell haskell-stack

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