小编Rus*_*ell的帖子

定义多个特征的最佳实践,这些特征为实现特定特征的类添加行为

假设我有一些traits,每个都为扩展的类添加一些行为Actor.

它们每个都需要一小部分方法Actor.他们都可以Actor像这样延伸吗?

trait A extends Actor {
  def doAThing = { ... }
}
trait B extends Actor {
  def doBThing = { ... }
}
trait C extends Actor {
  def doCThing = { ... }
}

class D extends Actor with A with B with C
Run Code Online (Sandbox Code Playgroud)

或者每个特征是否应该从Actor抽象方法中定义它所需的方法,以便它们由最终的具体类提供,这是唯一一个将扩展的类Actor

scala traits

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

如何在scala中围绕泛型方法包装泛型方法?

我正在尝试包装spray-json解析器,使其返回Option而不是抛出异常.

作为第一步,我只是尝试用自己的方法包装方法,但是我在使它成为通用方法时遇到了问题.

解析器使用隐式格式对象(为我正在使用的具体类型定义)但是当该方法是通用的时,编译器会抱怨:

[error]     Cannot find JsonReader or JsonFormat type class for T
[error]     def parse[T](s: String): T = JsonParser(s).convertTo[T]
Run Code Online (Sandbox Code Playgroud)

这是相关的代码:

case class Person(name: String)

object Protocols {
  implicit val personFormat = jsonFormat1(Person)
}

import spray.json._

object Parser {
  import com.rsslldnphy.json.Protocols._
  // JsonParser(s).convertTo[Person] works fine, but..
  def parse[T](s: String): T = JsonParser(s).convertTo[T]  // .. doesn't
}  
Run Code Online (Sandbox Code Playgroud)

我需要做些什么才能让它发挥作用?

scala generic-method spray-json

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

编译器抱怨延迟DelayedInit的类没有定义delayedInit方法

我有一个课程,我正在努力扩展DelayedInit:

class Foo extends DelayedInit {
  // expensive initialisation code
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行时,sbt compile我收到错误:

Foo needs to be abstract, since method delayedInit in trait DelayedInit of type (x: => Unit)Unit is not defined
Run Code Online (Sandbox Code Playgroud)

我的理解是,通过扩展DelayedInit特征,任何初始化代码都应自动包装在一个闭包中,并delayedInit在初始化完成后在方法中运行.但是我用谷歌搜索了,似乎无法找到一个使用示例.我错过了什么?

scala

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

玩游戏!修改文件时重新编译,而不是刷新浏览器时重新编译

刚刚开始使用Play框架和一个轻微的刺激因素,当我进行更改然后刷新它需要很长时间(几秒钟)才能重新编译,所以我可以在浏览器中看到它.例如,在对视图进行许多微小调整时,这会有点恼人.

是否有一种神奇的方法可以让Play尝试在源文件发生更改时重新编译,而不是等到刷新浏览器?

playframework playframework-2.0

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

周围范围的隐式参数解析

我不喜欢将隐式参数引入我的代码中,所以在我使用它们时我想封装它们的用法.所以我试图定义一个对象,它既包含对异常处理的spray-json的调用,又包含每个模型类的默认隐式JsonFormats.但是,隐式参数不会被解析,除非它们被导入到客户端,调用代码,这正是我不想要它们的地方.这是我到目前为止(它没有解决隐式格式化程序),有没有办法让我得到我想要的工作?

package com.rsslldnphy.json

import com.rsslldnphy.models._
import spray.json._

object Json extends DefaultJsonProtocol {

  implicit val personFormat = jsonFormat1(Person)
  implicit val animalFormat = jsonFormat1(Animal)

  def parse[T](s:String)(implicit reader: JsonReader[T]): Option[T] = {
    try { Some(JsonParser(s).convertTo[T]) }
    catch { case e: DeserializationException => None }
  }
}
Run Code Online (Sandbox Code Playgroud)

NB.JsonFormat是一种JsonReader

编辑:这是我根据@ paradigmatic的第二个建议(我无法工作,我仍然得到Cannot find JsonReader or JsonFormat type class for T)写的.我错过了什么吗?

object Protocols extends DefaultJsonProtocol {
  implicit val personFormat = jsonFormat1(Person)
  implicit val animalFormat = jsonFormat1(Animal)
}

object Json {

  def parse[T](s:String): Option[T] = { …
Run Code Online (Sandbox Code Playgroud)

scala implicits spray-json

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

抽象化scala中复杂模式匹配的复杂性

如果我正在针对(相对)复杂的案例类进行大量模式匹配,但大多数时候我只对其中的一个或两个字段感兴趣.有没有办法抽象掉其他字段(也许是通过包装类?)?这是我正在尝试简化的事物类型的示例:

def receive = {
  case HttpRequest(POST, "foo", _, HttpBody(_, body), _) => // action
  case HttpRequest(GET, "bar", _, _, _) => // action
}
Run Code Online (Sandbox Code Playgroud)

我只是对请求类型,url和有时身体感兴趣,所以我最好将模式匹配定义为case Request(POST, "foo", body)或类似.

scala pattern-matching

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

如何使用包含/字符的Ruby重命名文件?

我写了一个小的Ruby命令行应用程序,用于在我的Mac硬盘上保持电视节目的组织.鉴于电视剧集的性质,有一些剧集包括/角色.

在Mac上,文件系统实际上允许我编写这个文件,如果我手动重命名文件,/一切都很好.

Ruby File.rename在我的脚本中运行的那一刻然而我只是得到一个No such file or directory错误,因为Ruby试图/将文件名作为应该存在的文件夹读取.

这是一个例子:

输出路径是 /TV/Showname/Season 1/Showname - 1x07 - 5/1.mp4

现在不是寻找文件夹/Showname - 1x07 - 5/并写入其中的1.mp4文件,我怎么能告诉ruby简单地取文件名(Showname - 1x07 - 5/1.mp4)并将其写入Season 1文件夹中?

谢谢阅读.

ruby rename file special-characters

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