小编j3d*_*j3d的帖子

如何使用TypeTags在运行时创建类型为T的实例

下面是如何在运行时创建T类型的新实例Manifest:

trait MyTrait
class MyClass1(val name: String) extends MyTrait
class MyClass2(val name: String) extends MyTrait

class Test[T <: MyTrait] {

  def createInstance[T](name: String)(implicit m: Manifest[T]): T = {
    m.runtimeClass.getConstructors()(0)
      .newInstance(name).asInstanceOf[T]
  }

  def doSomething() {
    val myClass = createInstance("joe")
    ...
  }
}

...

val test = new Test[MyClass1]
test.doSomething
Run Code Online (Sandbox Code Playgroud)

createInstance上面的方法创建了一个实现MyTrait和调用具有给定字符串的构造函数的类的新实例.我该如何实现相同的TypeTag


使用scala.reflect.runtime._重新实现

下面是Test按照som-snytt的建议重新实现的类:

class Test[T <: MyTrait] {

  import scala.reflect.runtime._
  import scala.reflect.runtime.universe._

  def createInstance[T: TypeTag](name: String): T = {
    val tt = typeTag[T] …
Run Code Online (Sandbox Code Playgroud)

reflection scala

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

Scala:如何总结元组列表

给出以下元组列表......

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

...如何将所有值相加并获得这样的单个元组?

(3, 6)
Run Code Online (Sandbox Code Playgroud)

scala tuples sum

11
推荐指数
2
解决办法
9745
查看次数

Scala:如何确定失败的异常类型

看看这段代码:

userService.insert(user) match {
  case Success(f) => Logger.debug("User created successfully")
  case Failure(e) => {
     // how do I determine the type of `e`?
  }
}
Run Code Online (Sandbox Code Playgroud)

如何确定包含的异常类型Failure?我需要根据异常类型采取不同的操作.

error-handling scala exception

10
推荐指数
1
解决办法
2428
查看次数

Play:如何在向/从MongoDB写入/读取JSON时转换JSON

这是一个我想要写入/读取MongoDB的简单JSON:

{
  "id": "ff59ab34cc59ff59ab34cc59",
  "name": "Joe",
  "surname": "Cocker"
}
Run Code Online (Sandbox Code Playgroud)

将其存储在MongoDB中之前,"ff59ab34cc59ff59ab34cc59"必须被转换成一个ObjectIDid更名为_id...所以获得以下几方面Reads,我怎么做到这一点?

val personReads: Reads[JsObject] = (
  (__ \ 'id).read[String] ~ // how do I rename id to _id AND transform "ff59ab34cc59ff59ab34cc59" to an ObjectID?
  (__ \ 'name).read[String] ~
  (__ \ 'surname).read[String]
) reduce
Run Code Online (Sandbox Code Playgroud)

当然,我还需要为我的相反Writes,即重命名_id,以id和转化的ObjectID,格式为纯文本"ff59ab34cc59ff59ab34cc59".

json scala mongodb playframework reactivemongo

10
推荐指数
1
解决办法
4950
查看次数

播放子项目:如何转换为build.sbt

我有一个工作的多模块Play 2.2应用程序,它的组织方式......

myApp
  + app
  + conf
  + project
      + build.properties
      + Build.scala
      + plugin.sbt
Run Code Online (Sandbox Code Playgroud)

......其中Build.scala包含以下声明:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = "myApp"
  val appVersion      = "1.0-SNAPSHOT"

  val authDependencies = Seq(
    "se.radley" %% "play-plugins-salat" % "1.3.0"
  )

  val mainDependencies = Seq(
    "se.radley" %% "play-plugins-salat" % "1.3.0"
  )

  lazy val auth = play.Project(
    appName + "-auth",
    appVersion,
    authDependencies,
    path = file("modules/auth")).settings(
      lessEntryPoints <<= baseDirectory(customLessEntryPoints),
      routesImport += "se.radley.plugin.salat.Binders._",
      templatesImport += "org.bson.types.ObjectId",
      testOptions …
Run Code Online (Sandbox Code Playgroud)

scala sbt playframework

9
推荐指数
1
解决办法
4226
查看次数

Typesafe配置:如何迭代配置项

在我的Play应用程序中,我有一个这样的配置:

social {
    twitter {
        url="https://twitter.com"
        logo="images/twitter.png"
    }
    facebook {
        url="https://www.facebook.com"
        logo="images/facebook.png"
    }
}
Run Code Online (Sandbox Code Playgroud)

我会迭代所有social条目以获取urllogo每个条目吗?

<table border="0" cellspacing="0" cellpadding="2"><tr>
    @configuration.getConfig("social").map { config =>
        @for(item <- config.entrySet) {
           <td><a href="item.getString("url")">
           <img src="@routes.Assets.at("item.getString("logo")").absoluteURL()" width="24" height="24"/></a></td>
        }
    }
</table>
Run Code Online (Sandbox Code Playgroud)

当然,item.getString在上面的片段中不起作用......它只是展示了我想要实现的目标.

最终目标是能够添加任何进一步的社交URL,而无需修改页面模板.

scala playframework typesafe-config

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

在SBT中的多项目构建下使用包生成根项目的工件

我在SBT中有一个多项目构建配置,它由两个相互依赖的不同模块组成.他们只是(碰巧)属于同一产品.

项目布局如下:

myLib
  + build.sbt
  + myProject_1
  |    + build.sbt
  |    + src
  |        + ...
  + myProject_2
  |    + build.sbt
  |    + src
  |        + ...
  + project
       + Build.scala
Run Code Online (Sandbox Code Playgroud)

project/Build.scala包含常见设置,如下所示:

import sbt._
import Keys._

object ApplicationBuild extends Build {

  val appVersion = "1.0-SNAPSHOT"

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

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

  val defaultLibraryDependencies = Seq(
    "org.specs2" %% "specs2" …
Run Code Online (Sandbox Code Playgroud)

scala sbt

8
推荐指数
2
解决办法
2485
查看次数

MongoDB:如何通过嵌套文档中的id查找文档

鉴于这样的集合:..

[
  {
    "_id" : ObjectId("5546329a470000850084a621"),
    "name": "Joe",
    "surname": "Smith",
    "accounts": [
      {
        "_id" : ObjectId("5546329a470000850084a655"),
        "default": true,
        "status" : "approved",
        "activationTime" : ISODate("2013-05-03T14:37:15.025Z")
      },
      {
        "_id" : ObjectId("5546329a470000850084a688"),
        "default": true,
        "status" : "approved",
        "activationTime" : ISODate("2014-06-03T14:37:15.025Z")
      }
    ]
  },
  {
    "_id" : ObjectId("9546329a470079850084a622"),
    "name": "Jimmy",
    "surname": "Brown",
    "accounts": [
      {
        "_id" : ObjectId("5546329a470790850084a651"),
        "default": true,
        "status" : "suspended",
        "activationTime" : ISODate("2015-02-03T14:37:15.025Z")
      },
      {
        "_id" : ObjectId("5546329a470019850084a611"),
        "default": true,
        "status" : "approved",
        "activationTime" : ISODate("2015-04-03T14:37:15.025Z")
      }
    ]
  },
]
Run Code Online (Sandbox Code Playgroud)

...我怎么找到一份文件 …

mongodb mongodb-query embedded-documents

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

如何在嵌入式阵列中更新后取回新值?

鉴于以下MongoDB集合:

{
    "_id": ObjectId("56d6a7292c06e85687f44541"),
    "name": "My ranking list",
    "rankings": [
        {
            "_id": ObjectId("46d6a7292c06e85687f55542"),
            "name": "Ranking 1",
            "score": 1
        },
        {
            "_id": ObjectId("46d6a7292c06e85687f55543"),
            "name": "Ranking 2",
            "score": 10
        },
        {
            "_id": ObjectId("46d6a7292c06e85687f55544"),
            "name": "Ranking 3",
            "score": 15
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

以下是我如何提高给定排名的得分:

db.collection.update(
    { "_id": ObjectId("56d6a7292c06e85687f44541"), "rankings._id" : ObjectId("46d6a7292c06e85687f55543") },
    { $inc : { "rankings.$.score" : 1 } }
);
Run Code Online (Sandbox Code Playgroud)

我如何获得新的分数值?在上一个查询中,我将第二个排名从10增加到11 ...如何在更新后获得这个新值?

mongodb mongodb-query

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

NuGet - 如何在MonoDevelop/Xamarin Studio上配置包恢复

阅读使用的NuGet不承诺包到源代码控制,我明白我应该添加.nuget文件夹到我的项目,以使构建过程中包恢复...和阅读准备的NuGet一个混帐回购协议我已经明白我可以删除NuGet.exe,并NuGet.config和让IDE通过设置自动下载它们DownloadNuGetExetrueNuGet.targets.

好吧,我有点困惑,因为1)Xamarin Studio既不下载NuGet.exe也不下载NuGet.config... 2).nuget文件夹根本不需要,因为人们可以在解决方案资源管理器上发出命令Restore NuGet Packages并且无论如何都要恢复包.

话虽如此,在Xamarin Studio/MonoDevelop上配置包恢复的正确方法是什么?

monodevelop nuget xamarin-studio

6
推荐指数
1
解决办法
6087
查看次数