小编lam*_*das的帖子

如何在ScalaTest中禁用测试套件

如何禁用测试套件,即类扩展中的所有测试FunSpec

我已经发现的唯一的解决办法是更换itignore每次试验前,但它是无聊与几十个测试这样做.

testing scala scalatest

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

模糊的隐含值

我一直以为我理解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 ambiguity implicit-conversion

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

anorm的Pk的目的是什么?

我正在使用Scala和Anorm编写Playframework 2.0应用程序来访问db.

目前我使用Pk[Long]id领域,我很担心额外的get访问实际值所需要的呼叫.所以我开始使用普通Longid字段,一切仍然完美.

什么Pk是,我应该使用它而不是普通类型?Pk与普通类型相比,它能给我带来额外的功能吗?

types scala anorm playframework-2.0

15
推荐指数
1
解决办法
2701
查看次数

在规范之前和之后执行代码

我有简单的说明,其中有几个案例:

class MySpec extends Specification {

  "Something" should {

    "case 1" in {
      ...
    }

    "case 2" in {
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要启动应用程序,运行所有情况并关闭应用程序.启动/停止应用程序非常耗时,我不希望它发生在每个案例周围.

如何在案例开始之前和所有案例结束后运行代码?

testing scala specs2

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

谓词保持时重复调用函数

我正在向远程服务器发出请求,有时由于网络不可靠而请求失败.如果失败我想要重复请求,但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)

functional-programming scala

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

具有多个隐式参数的函数文字

如何在Scala中使用多个隐式参数定义函数文字?我试过这种方式:

def create = authAction { (implicit request, user) ? // Syntax error
  Ok(html.user.create(registrationForm))
}
Run Code Online (Sandbox Code Playgroud)

但它会抛出编译错误.

syntax arguments scala function syntax-error

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

如何枚举vim中的选项卡?

Vim是非常高效的编辑器,我喜欢每天都使用它,但我发现在标签之间移动需要花费更多时间.

当我想切换到另一个标签时,我经常重复gtgT多次.Vim提供了一种更好的方式来访问所需的选项卡 - n+ gt,其中n是选项卡号.但要使用它,您应首先计算标签号.如果打开十几个标签,很快就会变得无聊.

我认为枚举标签会很好.文件名前面每个选项卡上的单个数字,如下所示:

1 Readme | 2 main.c | 3 main.h | 4 process.h
Run Code Online (Sandbox Code Playgroud)

我希望通过编辑配置或使用一些插件来配置vim来实现这一点.

有没有办法实现它?

vim tabs

8
推荐指数
1
解决办法
1076
查看次数

如何以功能方式验证参数?

我正在编写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

7
推荐指数
1
解决办法
791
查看次数

Play 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,如何实现这一目标?

scala compiler-errors playframework-2.0

7
推荐指数
1
解决办法
882
查看次数

测试副作用monad的定律

我正在编写一个库来通过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)

monads functional-programming scala equality scalaz

7
推荐指数
1
解决办法
337
查看次数