小编Joh*_*Doe的帖子

在Scala中使用flatMap时如何将两个Option [String]变量合并为一个?

我有以下课程:

case class Profile(email: Option[String],
                   firstName: Option[String],
                   lastName: Option[String],
                   fullName: Option[String])
Run Code Online (Sandbox Code Playgroud)

现在我想删除该fullName属性,因为它是多余的.但是,我的类中有一个方法User返回fullName:

case class User(id: UUID, profiles: List[Profile]) {
// Skipped some lines
  def fullName(loginInfo:LoginInfo) = profileFor(loginInfo).flatMap(_.fullName)
}
Run Code Online (Sandbox Code Playgroud)

现在我试图.flatMap(_.fullName)firstName+ 的串联替换该部分lastName.如何才能做到这一点?我需要制作一个新的Option[String],像这样:

def fullName(loginInfo:LoginInfo) = {
  val firstName = profileFor(loginInfo).flatMap(_.firstName)
  val lastName = profileFor(loginInfo).flatMap(_.lastName)
  val fullName : Option[String] = Some(firstName + " " + lastName)
  fullName
}
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

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

在Play 2.5 HTML模板中自动注入WebJarAssets?

在我的custom模块中的Play HTML模板中,我有以下代码行:

<script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(WebJarAssets.locate("jquery.min.js"))"></script>
Run Code Online (Sandbox Code Playgroud)

这引用了模块中的WebJarAssets类,core如下所示:

package controllers.core

import javax.inject._
import play.api.http.HttpErrorHandler
import play.api.{Environment, Configuration}

class WebJarAssets @Inject()(errorHandler: HttpErrorHandler, configuration: Configuration, environment: Environment) extends controllers.WebJarAssets(errorHandler, configuration, environment)
Run Code Online (Sandbox Code Playgroud)

请注意,我也包含在以下行build.sbtcustom模块:

"org.webjars" %% "webjars-play" % "2.5.0",
Run Code Online (Sandbox Code Playgroud)

启动应用程序时,我收到以下错误:

[error] /Users/john/DemoProject/modules/custom/app/views/custom/templates/main.scala.html:36: not found: value WebJarAssets
[error]     <script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(WebJarAssets.locate("jquery.min.js"))"></script>
[error]                                                                                  ^
Run Code Online (Sandbox Code Playgroud)

从早期版本中的WebJarAssets的实现来看,没有必要为此实现和注入自己的控制器(例如,参见本教程).

我究竟做错了什么?我是否需要一个WebJarAssets类(因为我在许多模块中需要web jar资产,我现在在core模块中添加了这个).此外,为什么我需要在模板中手动注入它,为什么不自动解决?

万一你想知道手动注入对我来说意味着什么:

@(title: String, webJarAssets: WebJarAssets)(content: Html)(implicit messages:Messages)
<script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(webJarAssets.locate("jquery.min.js"))"></script>
Run Code Online (Sandbox Code Playgroud)

scala sbt playframework webjars playframework-2.5

5
推荐指数
1
解决办法
2859
查看次数

如何在Play 2.5中激活循环依赖?

这个问题源于我两天前提出的一个问题.我实现了自己的错误处理程序,扩展DefaultHttpErrorHandler.DefaultHttpErrorHandler延伸HttpErrorHandler,其也被用作一个参数errorHandler: HttpErrorHandlerWebJarAssets类.首先,我认为我的设计存在缺陷,但詹姆斯·沃德评论说我似乎做得对.

长话短说,我需要知道如何激活循环依赖.不幸的是,Play文档中没有列出示例代码,因此我不知道应该在哪里设置disableCircularProxies(false).

scala guice playframework webjars playframework-2.5

5
推荐指数
1
解决办法
1185
查看次数

如何使用Play的JSON库在ReactiveMongo中对带有查询的文档进行计数?

让我们考虑一下我有一个users具有age属性的集合。现在,我要计算集合中的所有文档users或仅统计与age属性匹配的文档。因此,我做了以下工作:

  def count(age: Option[Int] = None) = {
    if (age.isEmpty) roles.count()
    else users.count(Json.obj("age" -> age))
  }
Run Code Online (Sandbox Code Playgroud)

问题是users.count(Json.obj("age" -> age))抛出编译错误,因为count反应性mongo提供的方法需要类型Option[pack.Document]。知道我该如何解决吗?

如果重要的话,我正在使用Reactive Mongo版本0.11.11。

scala mongodb reactivemongo play-reactivemongo

0
推荐指数
1
解决办法
1291
查看次数