如何禁用测试套件,即类扩展中的所有测试FunSpec?
我已经发现的唯一的解决办法是更换it与ignore每次试验前,但它是无聊与几十个测试这样做.
我一直以为我理解scala implicits直到最近才遇到奇怪的问题.
在我的应用程序中,我有几个域类
case class Foo(baz: String)
case class Bar(baz: String)
Run Code Online (Sandbox Code Playgroud)
还有一个能够从字符串构造域对象的类.它可以被子类化以进行真正的反序列化并不重要.
class Reads[A] {
def read(s: String): A = throw new Exception("not implemented")
}
Run Code Online (Sandbox Code Playgroud)
接下来,有隐式反序列化器
implicit val fooReads = new Reads[Foo]
implicit val barReads = new Reads[Bar]
Run Code Online (Sandbox Code Playgroud)
以及将字符串转换为域类之一的帮助器
def convert[A](s: String)(implicit reads: Reads[A]): A = reads.read(s)
Run Code Online (Sandbox Code Playgroud)
不幸的是,在尝试使用它时
def f(s: String): Foo = convert(s)
Run Code Online (Sandbox Code Playgroud)
我得到编译错误
error: ambiguous implicit values:
both value fooReads of type => Reads[Foo]
and value barReads of type => Reads[Bar]
match expected type Reads[A]
def f(s: String): …Run Code Online (Sandbox Code Playgroud) 我正在使用Scala和Anorm编写Playframework 2.0应用程序来访问db.
目前我使用Pk[Long]的id领域,我很担心额外的get访问实际值所需要的呼叫.所以我开始使用普通Long的id字段,一切仍然完美.
什么Pk是,我应该使用它而不是普通类型?Pk与普通类型相比,它能给我带来额外的功能吗?
我有简单的说明,其中有几个案例:
class MySpec extends Specification {
"Something" should {
"case 1" in {
...
}
"case 2" in {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要启动应用程序,运行所有情况并关闭应用程序.启动/停止应用程序非常耗时,我不希望它发生在每个案例周围.
如何在案例开始之前和所有案例结束后运行代码?
我正在向远程服务器发出请求,有时由于网络不可靠而请求失败.如果失败我想要重复请求,但n最多时间.如果我使用命令式语言,我会将请求发送代码放在while循环中,但我想以功能方式进行.
我为此目的写了一个帮手:
/** Repeatedly executes function `f`
* while predicate `p` holds
* but no more than `nTries` times.
*/
def repeatWhile[A](f: => A)(p: A => Boolean)(nTries: Int): Option[A] =
if (nTries == 0) {
None
} else {
f match {
case a if p(a) => repeatWhile(f)(p)(nTries - 1)
case a => Some(a)
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它像这样:
// Emulating unreliable connection
var n = 0
def receive(): Option[String] =
if (n < 4) {
n += 1
println("No …Run Code Online (Sandbox Code Playgroud) 如何在Scala中使用多个隐式参数定义函数文字?我试过这种方式:
def create = authAction { (implicit request, user) ? // Syntax error
Ok(html.user.create(registrationForm))
}
Run Code Online (Sandbox Code Playgroud)
但它会抛出编译错误.
Vim是非常高效的编辑器,我喜欢每天都使用它,但我发现在标签之间移动需要花费更多时间.
当我想切换到另一个标签时,我经常重复gt或gT多次.Vim提供了一种更好的方式来访问所需的选项卡 - n+ gt,其中n是选项卡号.但要使用它,您应首先计算标签号.如果打开十几个标签,很快就会变得无聊.
我认为枚举标签会很好.文件名前面每个选项卡上的单个数字,如下所示:
1 Readme | 2 main.c | 3 main.h | 4 process.h
Run Code Online (Sandbox Code Playgroud)
我希望通过编辑配置或使用一些插件来配置vim来实现这一点.
有没有办法实现它?
我正在编写Scala/Play 2.0应用程序,我希望我的代码根据请求返回不同的页面.这是我的代码:
// Validate client and return temporary credentials
def requestToken = Action { request =>
// Authorization header may present or not
val authHeader = parseHeaders(request headers AUTHORIZATION)
// Authorization header may contain such keys or not
val clientKey = authHeader("oauth_consumer_key")
val signature = authHeader("oauth_signature")
if (authenticateClient(clientKey, signature)) {
...
Ok(...)
} else {
Unauthorized(...)
}
Run Code Online (Sandbox Code Playgroud)
}
当请求格式错误且某些标头丢失时,会出现问题,然后抛出NoSuchElementException.
在命令式语言中,我会验证这样的每一步:
if (!request.headers.contains(AUTHORIZATION))
return Unathorized
val authHeader = parseHeaders(request headers AUTHORIZATION)
if (!authHeader.contains("oauth_consumer_key") || !authHeader.contains("oauth_signature"))
return Unathorized
val clientKey = authHeader("oauth_consumer_key") …Run Code Online (Sandbox Code Playgroud) functional-programming scala playframework playframework-2.0
我正在尝试使用可选列表作为查询参数来定义路由
GET /places controllers.Application.query(filter: Option[Seq[Int]])
Run Code Online (Sandbox Code Playgroud)
但得到这个错误
conf/routes - PlayException: Compilation error [`)' expected but `]' found]
Run Code Online (Sandbox Code Playgroud)
我知道Play 2处理得Option很好,我希望它传递Seq给我的自定义QueryStringBindable,如何实现这一目标?
我正在编写一个库来通过API访问Web服务.我已经定义了简单的类来表示API动作
case class ApiAction[A](run: Credentials => Either[Error, A])
Run Code Online (Sandbox Code Playgroud)
和一些执行Web服务调用的函数
// Retrieve foo by id
def get(id: Long): ApiAction[Foo] = ???
// List all foo's
def list: ApiAction[Seq[Foo]] = ???
// Create a new foo
def create(name: String): ApiAction[Foo] = ???
// Update foo
def update(updated: Foo): ApiAction[Foo] = ???
// Delete foo
def delete(id: Long): ApiAction[Unit] = ???
Run Code Online (Sandbox Code Playgroud)
我也做ApiAction了一个单子
implicit val monad = new Monad[ApiAction] { ... }
Run Code Online (Sandbox Code Playgroud)
所以我可以做点什么
create("My foo").run(c)
get(42).map(changeFooSomehow).flatMap(update).run(c)
get(42).map(_.id).flatMap(delete).run(c)
Run Code Online (Sandbox Code Playgroud)
现在我有麻烦测试它的monad法律
val x = 42 …Run Code Online (Sandbox Code Playgroud)