下面是如何在运行时创建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) 给出以下元组列表......
val list = List((1, 2), (1, 2), (1, 2))
Run Code Online (Sandbox Code Playgroud)
...如何将所有值相加并获得这样的单个元组?
(3, 6)
Run Code Online (Sandbox Code Playgroud) 看看这段代码:
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?我需要根据异常类型采取不同的操作.
这是一个我想要写入/读取MongoDB的简单JSON:
{
"id": "ff59ab34cc59ff59ab34cc59",
"name": "Joe",
"surname": "Cocker"
}
Run Code Online (Sandbox Code Playgroud)
将其存储在MongoDB中之前,"ff59ab34cc59ff59ab34cc59"必须被转换成一个ObjectID和id更名为_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".
我有一个工作的多模块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) 在我的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条目以获取url和logo每个条目吗?
<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,而无需修改页面模板.
我在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) 鉴于这样的集合:..
[
{
"_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集合:
{
"_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 ...如何在更新后获得这个新值?
阅读使用的NuGet不承诺包到源代码控制,我明白我应该添加.nuget文件夹到我的项目,以使构建过程中包恢复...和阅读准备的NuGet一个混帐回购协议我已经明白我可以删除NuGet.exe,并NuGet.config和让IDE通过设置自动下载它们DownloadNuGetExe以true在NuGet.targets.
好吧,我有点困惑,因为1)Xamarin Studio既不下载NuGet.exe也不下载NuGet.config... 2).nuget文件夹根本不需要,因为人们可以在解决方案资源管理器上发出命令Restore NuGet Packages并且无论如何都要恢复包.
话虽如此,在Xamarin Studio/MonoDevelop上配置包恢复的正确方法是什么?
scala ×7
mongodb ×3
sbt ×2
exception ×1
json ×1
monodevelop ×1
nuget ×1
reflection ×1
sum ×1
tuples ×1