小编iwe*_*ein的帖子

递归SamePropertyValues作为hamcrest中的匹配器

我正在寻找一个Hamcrest匹配器,其行为与SamePropertyValuesAs相同,但附加的扭曲是,如果属性不是基元,标准Java类之一(字符串,整数等),或其中一个的复合(集合)或者数组)然后它也将对这些属性进行递归匹配.

那里有这样的匹配器还是我必须自己动手?

java tdd unit-testing hamcrest matcher

4
推荐指数
1
解决办法
2864
查看次数

无法将unicode符号转换为西里尔字母

我有一大堆的文件中的Apache Lucene的坚持与俄罗斯的一些名字,当我试图把它们打印出来,它看起来像这样"\u0410\u0441\u043f\u0430\u0440",但不是在西里尔符号.该项目在Scala.我试图用Apache Commons unescapeJava方法解决这个问题,但它没有帮助.还有其他选择吗?

更新: 使用Spray框架编写项目并像这样返回json.

{
  "id" : 0,
  "name" : "\u0410\u0441\u043f\u0430\u0440"
}
Run Code Online (Sandbox Code Playgroud)

unicode scala escaping spray spray-json

4
推荐指数
1
解决办法
973
查看次数

Haskell中的前提条件检查有哪些选项

这是一个简单的问题,我认为这是一个复杂的答案.

一个非常常见的编程问题是返回某些内容的函数,或者无法进行前置条件检查.在Java中,我会使用一些IllegalArgumentException在方法开头抛出的断言函数,如下所示:

{
  //method body
  Assert.isNotNull(foo);
  Assert.hasText(bar)
  return magic(foo, bar);
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这个是它是每个先决条件的oneliner.我不喜欢这个是抛出异常(因为异常~goto).

在Scala中,我使用了Either,它有点笨重,但比抛出异常更好.

有人向我建议:

putStone stone originalBoard = case attemptedSuicide of 
  True  -> Nothing
  False -> Just boardAfterMove
  where {
    attemptedSuicide = undefined
    boardAfterMove = undefined
  }
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是强调真假,这本身就没有任何意义; 的attemptedSuicide前提是藏在语法之间,所以没有明确相关的任何操作,实际执行的putStone(boardAfterMove)是没有明确的核心逻辑.要启动它不会编译,但我确信这不会破坏我的问题的有效性.

在Haskell中可以干净地完成前置条件检查的方法是什么?

haskell preconditions

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

是否可以匹配Scala中的清单类型?

我在Scala中编写了一些代码,它依赖于我在参数上看不到的类型参数.

def read[T](json: String)(implicit m: Manifest[T]): T = {
  if (m <:< manifest[Map[String, Any]]) {
    JsonParser.jsonToMap(json).asInstanceOf[T]
  } else {
    throw new UnsupportedOperationException("Not implemented for type %s".format(m))
  }
}
Run Code Online (Sandbox Code Playgroud)

除了我正在编写自己的json框架之外,这可能是一个非常糟糕的主意......

我可以使用case语句而不是if语句,还是应该在不同的方向思考?

scala

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

Scala替代蟒蛇`与`

在python中你可以避免try {} catch {} finally {}样板文件with(参见什么是python关键字"with"用于?).我记得在Scala中看到了替代方案,但我再也找不到了.

它遵循以下方针:

def using[O](r: {def close()})(doit: () => O): O = try {
  doit()
} finally {
  r.close
}

using(myWriter){() => myWriter.println("something or another")}
Run Code Online (Sandbox Code Playgroud)

它是内置于2.10,还是我需要一个单独的库?

scala

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

是否可以将字符串匹配器与specs2 Json匹配器结合使用?

在specs2测试中,我正在使用JSON匹配器验证json字符串.我知道可以使用正则表达式来匹配这样的值

someJson must */("key")/("(one|other)".r)
Run Code Online (Sandbox Code Playgroud)

是否有可能以一种简洁的方式使用其他字符串匹配器(例如包含)?

鉴于这个凌乱的例子:

val someJson = """{"blob": "multiline string
                  |with various line endings"}"""
Run Code Online (Sandbox Code Playgroud)

这个匹配器

someJson must */("blob")/contains("various")
Run Code Online (Sandbox Code Playgroud)

看起来比清洁得多

someJson must */("blob")/"[^v]various.*".r
Run Code Online (Sandbox Code Playgroud)

哪个不适合使用,但在这种情况下可能有用.

scala specs2

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

我应该如何使用不同的状态代码响应Spray中的GET请求?

对于POST和PUT请求,我使用以下语法:

put {
  entity(as[CaseClass]) { entity =>
     returnsOption(entity).map(result => complete{(Created, result)})
       .getOrElse(complete{(NotFound, "I couldn't find the parent resource you're modifying")})
  }
}
Run Code Online (Sandbox Code Playgroud)

现在对于GET请求,我正在尝试做同样的事情,但我不能让它类似于我的PUT解决方案.使用GET请求执行此操作的好方法是什么?

更新:我已经使用以下hack:

(get & parameters('ignored.?)) {
  //TODO find a way to do this without ignored parameters
  (ingored:Option[String]) => {
     returnsOption().map(result => complete(result))
       .getOrElse(complete{(NotFound, "")})
  }
 }
Run Code Online (Sandbox Code Playgroud)

我希望类似的东西可以使用() =>或者ctx =>,但是它不会飞,因为它给编组提供了麻烦:

... could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[(spray.http.StatusCodes.ClientError, String)]
    }).getOrElse(ctx.complete{(NotFound, "")})
                             ^
Run Code Online (Sandbox Code Playgroud)

可能是因为这与我使用spray-json的事实有关吗?

spray

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

为什么我不能将String用作类型类?

这是一个绝对的初学者Haskell问题.可能需要进行一些编辑.

给出以下代码:

import Data.Maybe
someFunction :: String b => Int -> Maybe b
someFunction x = Nothing
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Main.hs@2:18-2:26`String' is applied to too many type arguments
In the type signature for `someFunction':
  someFunction :: String b => Int -> Maybe b
Run Code Online (Sandbox Code Playgroud)

我想明白为什么我看到这个错误.

类似的签名适用于:

import Data.Maybe
somethingElse :: Num b => Int -> Maybe b
somethingElse x = Nothing
Run Code Online (Sandbox Code Playgroud)

Num和String之间的区别是什么?(可能是因为String不是类型类?)

我能否以与Num类似的方式为String创建速记?(可能是?)

如果我遇到这种情况,如何找到正确的类型?

更新:

为了说明我想要为String类型提供简写的原因:

somethingElse ::  String -> String -> String -> String
somethingElse x s t  =  t ++ s …
Run Code Online (Sandbox Code Playgroud)

haskell

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

删除行后,mysql表的大小没有减小

我从数据库表中删除了1M行.令人惊讶的是它的尺寸没有减少.然后我试过了:FLUSH TABLES;但是我在我的cPanel的phpMyAdmin上运行了这个语句然后我遇到了以下错误:

#1227 - Access denied; you need (at least one of) the RELOAD privilege(s) for this operation
Run Code Online (Sandbox Code Playgroud)

如何减小表格大小并清除其缓存?

mysql phpmyadmin cpanel

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