我正在寻找一个Hamcrest匹配器,其行为与SamePropertyValuesAs相同,但附加的扭曲是,如果属性不是基元,标准Java类之一(字符串,整数等),或其中一个的复合(集合)或者数组)然后它也将对这些属性进行递归匹配.
那里有这样的匹配器还是我必须自己动手?
我有一大堆的文件中的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) 这是一个简单的问题,我认为这是一个复杂的答案.
一个非常常见的编程问题是返回某些内容的函数,或者无法进行前置条件检查.在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中可以干净地完成前置条件检查的方法是什么?
我在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语句,还是应该在不同的方向思考?
在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,还是我需要一个单独的库?
在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)
哪个不适合使用,但在这种情况下可能有用.
对于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的事实有关吗?
这是一个绝对的初学者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) 我从数据库表中删除了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)
如何减小表格大小并清除其缓存?
scala ×4
haskell ×2
spray ×2
cpanel ×1
escaping ×1
hamcrest ×1
java ×1
matcher ×1
mysql ×1
phpmyadmin ×1
specs2 ×1
spray-json ×1
tdd ×1
unicode ×1
unit-testing ×1