小编j3d*_*j3d的帖子

Scala:当Map不包含密钥时,如何取回密钥

我们假设如下Map:

val map = Map("eins" -> "one", "zwei" -> "two", "drei" -> "three")
Run Code Online (Sandbox Code Playgroud)

正如预期的那样map返回与给定键关联的值:

scala> map("eins")
res0: String = one
scala> map("zwei")
res1: String = two
...
Run Code Online (Sandbox Code Playgroud)

当然,如果给定的密钥不存在,它会崩溃:

scala> map("zehn")
java.util.NoSuchElementException: key not found: zehn
Run Code Online (Sandbox Code Playgroud)

有没有办法取回密钥本身而不是异常?

map("zehn") -> "zehn"
Run Code Online (Sandbox Code Playgroud)

谢谢.

scala

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

玩:如何实施动作组合

鉴于后续ActionBuilder实施:

class SignedRequest[A](request: Request[A]) extends WrappedRequest[A](request) {}

object SignedAction extends ActionBuilder[SignedRequest] {

  def invokeBlock[A](request: Request[A], block: SignedRequest[A] => Future[SimpleResult]) = {
    block(new SignedRequest(request))
  }   
}     

class SecuredRequest[A](request: Request[A]) extends WrappedRequest[A](request) {}

object SecuredRequest extends ActionBuilder[SecuredRequest] {

  def invokeBlock[A](request: Request[A], block: SecuredRequest[A] => Future[SimpleResult]) = {
    block(new SecuredRequest(request))
  }   
}
Run Code Online (Sandbox Code Playgroud)

我如何组合它们?我试过以下......

object MyController extends Controller {

  def doSomething = SignedAction.async(parse.json) {
    SecuredAction.async(parse.json) { implicit request =>
      Future.successful(Ok)
  }}
}
Run Code Online (Sandbox Code Playgroud)

...但我总是收到以下错误消息:

/home/j3d/test/controllers/MyController.scala:37: type mismatch;
[error]  found   : play.api.mvc.Action[play.api.libs.json.JsValue]
[error]  required: …
Run Code Online (Sandbox Code Playgroud)

scala playframework

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

Play Framework:如何将List转换为JsArray

鉴于以下List......

val list = List("one", "one", "two", "two", "three", "three")
Run Code Online (Sandbox Code Playgroud)

...我怎么把它转换成JsArray这样的?

["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)

如您所见,我还需要删除重复项.

json scala playframework

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

Play 框架:如何将 JSON 转换为 List[Int]

给定以下 JSON 字符串...

val jsonStr = "[1, 2, 3]"
Run Code Online (Sandbox Code Playgroud)

...我如何将其转换为 a List[Int]?以下语句返回 a JsValue,其中不包含 method read

Json.parse(jsonStr)
Run Code Online (Sandbox Code Playgroud)

json scala playframework

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

播放框架:反向路由时出现NoSuchFieldError

这是我的common.routes文件:

GET     /emails/:deflated   controllers.common.Emails.viewInBrowser(deflated)
Run Code Online (Sandbox Code Playgroud)

...这里是我的控制器:

package controllers.common

object Emails extends Controller {

  def viewInBrowser(deflated: String) = Action { implicit request =>
    GZip.inflate(deflated) match {
      case Success(inflated) => Ok(Html(inflated))
      case Failure(e) => {
        Logger.warn(s"error inflating email from url", e)
        val support = configuration.getString("application.emails.support")
        BadRequest(views.html.badRequest(Messages("common.error.invalidOrMalformedUrl", support)))
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常...但是如果我像这样反转路线

import controllers.common.routes
...

val sslEnabled = configuration.getBoolean("ssl").getOrElse(false)
val emailUrl = routes.Emails.viewInBrowser(true).absoluteURL(sslEnabled)
Run Code Online (Sandbox Code Playgroud)

...我总是以下例外:

java.lang.NoSuchFieldError: Emails
at utils.common.RoutesHelper$.emailUrl(RoutesHelper.scala:51)
at services.common.DefaultEmailComponent$DefaultRichBody.apply(EmailComponent.scala:64)
at services.common.DefaultEmailServiceComponent$DefaultEmailService.sendEmail(EmailServiceComponent.scala:81)
at utils.auth.EmailHelper$.sendUserVerificationEmail(EmailHelper.scala:32)
at controllers.auth.Users$$anonfun$create$1$$anonfun$8$$anonfun$apply$60$$anonfun$apply$61.apply(Users.scala:381)
at controllers.auth.Users$$anonfun$create$1$$anonfun$8$$anonfun$apply$60$$anonfun$apply$61.apply(Users.scala:379)
at scala.util.Success$$anonfun$map$1.apply(Try.scala:206)[ERROR] [05/30/2014 …
Run Code Online (Sandbox Code Playgroud)

playframework

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

为什么sbt一直告诉我在scalacOptions已经添加-deprecation?

以下是我的多项目结构:

myApp
  + build.sbt
  + sub-prj-1
      + build.sbt
  + sub-prj-2
      + build.sbt
  + project
      + Build.scala
Run Code Online (Sandbox Code Playgroud)

我用这个来定义常用设置project/Build.scala:

import sbt._
import Keys._

object ApplicationBuild extends Build {

  val defaultScalacOptions = Seq(
    "-unchecked", "-deprecation", "-feature", "-language:reflectiveCalls", "-language:implicitConversions",
    "-language:postfixOps", "-language:dynamics", "-language:higherKinds", "-language:existentials",
    "-language:experimental.macros", "-encoding", "UTF-8", "-Xmax-classfile-name", "140")

  val defaultResolvers = Seq(
    "Typesafe releases repository" at "http://repo.typesafe.com/typesafe/releases/"
  )

  val defaultSettings = Defaults.defaultSettings ++ Seq(
    scalaVersion := "2.10.4",
    scalacOptions ++= defaultScalacOptions,
    resolvers ++= defaultResolvers
  )
}
Run Code Online (Sandbox Code Playgroud)

...然后我在每个build.sbt文件中引用这些常见设置:

name := "myapp"

organization …
Run Code Online (Sandbox Code Playgroud)

scala sbt

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

如何将Map [CustomType,String]序列化为JSON

鉴于以下Enumeration...

object MyEnum extends Enumeration {

  type MyEnum = Value

  val Val1 = Value("val1")
  val Val2 = Value("val2")
  val Val3 = Value("val3")
} 

import MyEnum._
Run Code Online (Sandbox Code Playgroud)

...以及以下Map...

val m = Map(
  val1 -> "one",
  val2 -> "two",
  val3 -> "three"
)
Run Code Online (Sandbox Code Playgroud)

...我需要转换m为JSON:

import play.api.libs.json._

val js = Json.toJson(m)
Run Code Online (Sandbox Code Playgroud)

最后一条语句无法编译,因为编译器找不到type的Json序列化器scala.collection.immutable.Map[MyEnum.Value,String]

问题:由于Play确实提供了type的序列化器scala.collection.immutable.Map[String,String],并且我的枚举实际上包含字符串,是否可以重用默认的JSON序列化器?

scala playframework playframework-json

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

Scala:如何在未来打印列表

请查看以下代码段:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

object Main extends App {

  ids.foreach { l => println(l.mkString(", ")) }
  for(l <- ids) println(l.mkString(", "))

  def ids = Future(List(1, 2, 3, 4))
}
Run Code Online (Sandbox Code Playgroud)

方法ids返回一个Future[List[Int]],我想打印返回的值List:

ids.map { l => println(l.mkString(", ")) } // prints nothing
for(l <- ids) println(l.mkString(", "))    // prints nothing
Run Code Online (Sandbox Code Playgroud)

问题是上面的任何语句都没有打印List返回的内容ids.我错过了什么吗?

scala future for-comprehension

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

Scala For-Understarehension:如果未来失败,如何恢复和继续

给出以下List整数......

val l = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

...我需要调用2个方法来返回Future每个元素并获得以下结果:

Future(Some(1), Some(2), Some(3))
Run Code Online (Sandbox Code Playgroud)

以下是我的尝试:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

def f1(i: Int) = Future(i)
def f2(i: Int) = Future { if (i % 2 == 0) throw new Exception else i }

val l = List(1, 2, 3)

val results = Future.sequence(l.map { i =
  val f = for {
    r1 <- f1(i)
    r2 <- f2(i) // this throws an exception if i is even
  } yield Some(r1)

  f.recoverWith …
Run Code Online (Sandbox Code Playgroud)

scala future for-comprehension

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

列出按创建时间排序的目录中的文件

我知道如何使用ioutil.ReadDir()... 列出目录中的文件但是如何按创建时间(从最旧到最新)对它们进行排序?我正在使用go 8.3.

go

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