Scala的Map和Set定义了一个+
运算符,该运算符返回一个数据结构的副本,并附加一个元素.Seq
表示等效运算符:+
.
这种不一致有什么理由吗?
我有一个Reads[T]
.我想解析一个Json对象,该对象应该是一个数组T
.有没有一种简单的方法来获得一个Reads[Seq[T]]
没有定义我Reads[T]
的隐含?基本上,我正在寻找一个获取Reads[T]
和返回的函数Reads[Seq[T]]
.
我遇到过Reads.TraversableReads
,并且认为我可以明确地传递它需要的隐式阅读器,但是这个功能也需要一个CanBuildForm[...]
听起来不太有趣的功能.
我有一个隐式函数的import语句,IntelliJ认为由于一个bug而没有使用它.每当我执行该Organize Imports
命令时,IntelliJ都会删除该导入行.有没有办法告诉IntelliJ单独留下这条线?
我想-Dconfig.file=conf/dev.conf
在使用run
命令时通过Build.scala 将参数传递 给我的应用程序.
我试图把这样的东西放在我的Build.scala
:
val mySettings = Seq(
(javaOptions in run) ++= Seq("-Dconfig.file=conf/dev.conf")
)
val main = play.Project(appName, appVersion, appDependencies).settings(
mySettings: _*
)
Run Code Online (Sandbox Code Playgroud)
但它没有 - 从我收集的内容来看,这是因为当我使用run时,SBT不会分叉新的JVM.除了设置环境变量之外的任何变通方法?
我有一个方法调用一些其他方法,使用隐式类型Foo
.我想在Foo中隐含f.我是这样做的:
def myMethod(a: Int, f: Foo) = {
implicit val implicitF = f;
somethingThatNeedsFoo(a)
}
Run Code Online (Sandbox Code Playgroud)
我不想f
在myMethod的签名中标记隐式,因为Foos并不隐含在使用myMethod的上下文中.我的问题:与使用临时变量相比,是否有更惯用(或简洁)的方法来实现这种效果?
我有以下扩展类,将扩展类添加myAppend
到任何方法SeqLike
。
implicit class WithAppend[A, R](s: SeqLike[A, R]) extends AnyVal {
def myAppend(i: A)(implicit cbf: CanBuildFrom[R, A, R]): R = s :+ i
}
Run Code Online (Sandbox Code Playgroud)
如何将该代码移植到Scala 2.13并保留类似的性能特征?如果扩展类可以保持AnyVal
我尝试过的几件事:
class Extends1[R, S <: IsSeq[R]](c: R, isSeq: S) {
def myAppend(a: isSeq.A): R = (isSeq(c) :+ a).asInstanceOf[R]
}
Run Code Online (Sandbox Code Playgroud)
但是asInstanceOf
令人失望-它甚至安全吗?
我可以做:
class Extends3[S[_], A](c: SeqOps[A, S, S[A]]) {
def myAppend(a: A): S[A] = c :+ a
}
Run Code Online (Sandbox Code Playgroud)
但是现在我们被限于表单的集合,S[A]
而Scala 2.12代码可以接受任何形式R
。
我的模型包含一些未通过表单验证的数据(例如来自服务器的无效电子邮件地址).我仍然想向用户显示这个无效的模型数据,以便他们有机会修复它.
最小的例子:
<form ng-init="email='foo'">
<input type="email" ng-model="email"></input>
</form>
Run Code Online (Sandbox Code Playgroud)
如何获取输入以显示初始无效模型值?
JS小提琴:http://jsfiddle.net/TwzXV/4/
我们有一个 Web 应用程序在弹性负载均衡器后面的两台服务器上运行。我们每天多次部署它的新版本。每次发布新版本时,我们都会使用不同的 JS 和 CSS 文件名来避免缓存问题。例如,在一个版本中我们有 app-v1.js,而在下一个版本中我们有 app-v2.js。
我们希望使用 CloudFront 以 gzip 格式提供这些资源(前提是浏览器提供了适当的 Accept-Encoding 标头)。
我们探索了两种操作模式:
具有 S3 起源的 Cloudfront:似乎没有此功能(无论对象是否压缩,都不会提供基于标头的压缩版本)。
具有自定义源的 Cloudfront:无法应对滚动更新:当我们部署到服务器 A 时,我们的 HTML 中将会引用 app-v2.js。由于它尚未缓存在 CloudFront 中,CloudFront 将从我们的服务器请求它,并且可能会访问尚未收到更新的服务器,从而提供 404。
最好的做法是什么?我们是否遗漏了什么?我们考虑建立一个 nginx 代理服务器,以便它可以为 Cloudfront 压缩来自 S3 的内容。它会是这样的:
CloudFront --> nginx 代理 --> S3
我们可以做到这一点,但希望我们可以避免维护这一部分。有什么建议吗?
我试图从密封特征的实例定义一个地图.在下面的代码中,Scala似乎将键类型推断为Product with Serializable with Day
:
object Test extends App {
sealed trait Day
case object Sunday extends Day
case object Monday extends Day
case object Tuesday extends Day
val m: Map[Day, Int] = Map(Sunday -> 17, Monday -> 4).withDefaultValue(0)
}
Run Code Online (Sandbox Code Playgroud)
这不编译:
Test.scala:7: error: type mismatch;
found : scala.collection.immutable.Map[Product with Serializable with Test.Day,Int]
required: Map[Test.Day,Int]
Note: Product with Serializable with Test.Day <: Test.Day, but trait Map is invariant in type A.
You may wish to investigate a wildcard type …
Run Code Online (Sandbox Code Playgroud) 阅读Play-Slick DBAction代码,我认为此代码可能包含竞争条件:
object DBAction{
// snip
def apply(r: (RequestWithDbSession) => Result)(implicit app:Application) = {
Action { implicit request =>
AsyncResult {
DB.withSession{ s:scala.slick.session.Session =>
Future(r( RequestWithDbSession(request,s) ))(executionContext)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该函数r
在将来withSession
返回Future [Result]并调用之后运行session.close()
.这段代码中是否存在竞争条件?
scala ×7
angularjs ×1
implicit ×1
javascript ×1
json ×1
play-slick ×1
sbt ×1
scala-2.13 ×1
traits ×1