考虑以下测试用例:
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) 我正在尝试创建一个特性,当混入时,将用一个调用原始方法的方法替换方法的默认定义,然后操纵结果.
这是我正在尝试做的事情:
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在定义时使用 …
任何人都可以解释为什么在最后几行中,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)
谢谢
总有一天,我想学习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允许定义在方法之前调用的隐式转换得到了解决.在这种情况下,sbt在ManagedProjecttrait 内部定义,隐式转换String为私有类sbt.GroupID,以便
"a" …Run Code Online (Sandbox Code Playgroud) 我看到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) 我们有一大堆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专家为我们提供了一种在不同的运行中调整字典迭代顺序的方法,那么我们将努力实现这一目标.
我有一个基于Haskell的Web服务,它执行一些计算,对于某些输入可能需要很长时间才能完成.("真的很长"这里意味着超过一分钟)
因为执行该计算会占用服务器上所有可用的CPU,所以我将传入的请求放在一个队列中(好吧,实际上是一个堆栈,原因与典型的客户端有关,但除了这一点之外)当它们到达并为它们提供服务时当前正在运行的计算结束.
我的问题是,客户端并不总是等待足够长的时间,有时会超时,断开连接并尝试使用不同的服务器(好吧,他们再次尝试并点击elb,通常会获得不同的实例).此外,由于外部因素,Web客户端偶尔要求的计算将会过时,Web客户端将被终止.
在那些情况下,我真的希望能够在我将下一个请求从堆栈中拉出并开始(昂贵的)计算之前检测到Web客户端已经消失.不幸的是,我使用snap的经验让我相信在该框架中无法询问"客户端的TCP连接是否仍然连接?" 我还没有找到任何涵盖"客户端断开连接"案例的其他Web框架的文档.
那么是否有一个Haskell Web框架,可以很容易地检测Web客户端是否已断开连接?或者失败了,是否有一个至少使它成为可能?
(我知道在所有情况下都可能无法绝对确定TCP客户端是否仍在那里而不向另一端发送数据;但是,当客户端实际向服务器发送RST数据包而服务器的框架没有让应用程序代码确定连接已经消失,这是一个问题)
顺便说一下,虽然有人可能怀疑warp的 onClose处理程序会让你这样做,但只有当响应准备好并写入客户端时才会触发,因此作为中止正在进行的计算的方法是无用的.似乎也无法访问已接受的套接字以便设置SO_KEEPALIVE或类似.(有一些方法可以访问初始侦听套接字,但不是接受的套接字)
我必须从文件中读取的字符串中检查字符序列,例如\ 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)
但反斜杠被视为转义序列而不是字符.
任何有关如何做到这一点的帮助将不胜感激.
借助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中编写一个脚本循环,一次调用每个测试套件。
java ×3
scala ×3
haskell ×2
comparison ×1
operators ×1
pypy ×1
python ×1
python-2.7 ×1
python-3.x ×1
sbt ×1
scala-2.7 ×1
scalacheck ×1
tcp ×1
try-catch ×1